在awk

时间:2015-12-14 13:19:11

标签: linux awk gawk

我有几个这样的文件包含1行:

CHTACAUSYDUYADUSAYUDYASUDYUASYDUADSYAUDYSUAYDUASDUBASUDASUBDYUASYUCJUAYAYCYUAUAHUAHUHAUHDIADJIOAJDIAHDUADIAJDOJADIJAHUDHAA

我需要将它分成几行,每行添加1个字符:

CHTACAUSYDUYAD
CHTACAUSYDUYADU
CHTACAUSYDUYADUY
CHTACAUSYDUYADUYA
CHTACAUSYDUYADUYAD

我正在尝试使用此awk代码:

more +2 file | awk '
{ 
    split($0, chars, "")
    for (i=1; i <= length($0); i++) {
        printf("%s\n", chars[i])
    }
}'

但每行仅打印1个字符。 有人能帮助我吗?

1 个答案:

答案 0 :(得分:4)

问题出现在split中 - 这会破坏你的字符串与空的正则表达式。所以你需要substr代替:

  

substr(s,i [,n])返回从i开始的s的最多n个字符的子字符串。如果省略n,则使用s的其余部分。

第一行生成的标准不是很清楚,但让我假设它是由初始长度= 15

完成的
{
    initial = 15
    for (i=initial; i <= length($0); ++i) {
        printf("%s\n", substr($0, 1, i))
    }
}