AwK将较长的列与下一行对齐,并保持处理的行数相同

AwK将较长的列与下一行对齐,并保持处理的行数相同,awk,count,multiple-columns,rows,Awk,Count,Multiple Columns,Rows,嗨,我对这种类型的输入数据有以下问题: 包含以下列的输入文件: 文件1(原始文件) 我尝试使其将长列与下一行对齐,这是在以下代码的帮助下产生的: awk '{for (i = 1; i <= NF; i += 9) print $i, $(i+1), $(i+2), $(i+3), $(i+4), $(i+5), $(i+6), $(i+7), $(i+8), $(i+9)}' file1 @目标是根据您的想法使其输出类似这样甚至更好,但仍然保持相同数量的处理行 7 LINE_A G_V

嗨,我对这种类型的输入数据有以下问题:

包含以下列的输入文件:

文件1(原始文件)

我尝试使其将长列与下一行对齐,这是在以下代码的帮助下产生的:

awk '{for (i = 1; i <= NF; i += 9) print $i, $(i+1), $(i+2), $(i+3), $(i+4), $(i+5), $(i+6), $(i+7), $(i+8), $(i+9)}' file1
@目标是根据您的想法使其输出类似这样甚至更好,但仍然保持相同数量的处理行

7 LINE_A G_VALUEFA D_VALUEFA SEAT01 SEAT02 SEAT03 SEAT04
7 LINE_B G_VALUEFA D_VALUEFA SEAT22 SEAT25 SEAT27 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8
          EXNUM899999SSSSS9S8S5S2S8
7 LINE_C G_PREFX D_VALUEFX SEAT01 SEAT02 SEAT03 SEAT04
8 LINE_G G_PREFX D_VALUEFX POSITION55 POSITION82 VALUE85 POSITION44 POSITION448 POSITION448
          POSITION448 
7 LINE_C G_PREFA D_VALUEFA SEAT01 SEAT02 SEAT03

5 Lines processed  
对于计数,我使用下面的代码:但在使用AWK循环代码缩短后,它导致第7行的NR

awk '{print $0;NR;}END {print "\n" "\033[48;5;085;38;5;000m" NR, "Lines processed""\033[0m";}'

谢谢你,你有什么想法吗

$ cat file
7 LINE_A G_VALUEFA D_VALUEFA SEAT01 SEAT02 SEAT03 SEAT04
7 LINE_B G_VALUEFA D_VALUEFA SEAT22 SEAT25 SEAT27 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8
7 LINE_C G_PREFX D_VALUEFX SEAT01 SEAT02 SEAT03 SEAT04
8 LINE_G G_PREFX D_VALUEFX POSITION55 POSITION82 VALUE85 POSITION44 POSITION448 POSITION448 POSITION448
7 LINE_C G_PREFA D_VALUEFA SEAT01 SEAT02 SEAT03

$ cat tst.awk
{
    for (i=1; i<=NF; i++) {
        printf "%s%s", $i, (i<NF ? (i%9 ? OFS : ORS "\t") : ORS)
    }
}

$ awk -f tst.awk file
7 LINE_A G_VALUEFA D_VALUEFA SEAT01 SEAT02 SEAT03 SEAT04
7 LINE_B G_VALUEFA D_VALUEFA SEAT22 SEAT25 SEAT27 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8
        EXNUM899999SSSSS9S8S5S2S8
7 LINE_C G_PREFX D_VALUEFX SEAT01 SEAT02 SEAT03 SEAT04
8 LINE_G G_PREFX D_VALUEFX POSITION55 POSITION82 VALUE85 POSITION44 POSITION448
        POSITION448 POSITION448
7 LINE_C G_PREFA D_VALUEFA SEAT01 SEAT02 SEAT03

$ awk -f tst.awk file | awk '!/^\t/{++c} END{print c+0, "Lines processed"}'
5 Lines processed
$cat文件
7线A G值A D值A座01座02座03座04
7测线G值A D值A座22座25座27 EXNUM89999SSS9S8S5S2S8 EXNUM89999SSS9S8S5S2S8 EXNUM89999SSS9S8S5S2S8 EXNUM89999SSS9S8S8S8S5S2S8
7线路预配D_值Fx座01座02座03座04
8线路预紧D_值Fx位置55位置82值85位置44位置448位置448位置448位置448
7线路预配D值A座01座02座03
$cat tst.awk
{

对于(i=1;i你是说你想用一定数量的字符或字段来包装长行,并缩进包装行吗?如果是,那么这个数字是多少,是字符还是字段?如果不是,请说明你想做什么。为什么不在同一个脚本中同时做这两件事,这样你就不会记不清行的数量?还有,程序是什么essing而不是包装文本?事实上,我想在一些字段中包装长行(我在这里使用名称作为列),可能是它导致了这里的错误理解,数字是9。我想包装更长的行,并很好地将它们对齐到下一行,保留或返回处理行(行)的计数@karakfa,好吧,它是这样的:`awk'{print$0;NR;}END{print“\n”“\033[48;5;085;38;5;000m”NR,“行处理”“\033[0m”;}'file1 | awk'{for(i=1;我你是对的,这就是我搜索的,只需用“\t”包装并稍微移动一下它,“\t”,”我会调整它,谢谢你,现在我对这个处理比较清楚了,祝你过得愉快
awk '{print $0;NR;}END {print "\n" "\033[48;5;085;38;5;000m" NR, "Lines processed""\033[0m";}'
$ cat file
7 LINE_A G_VALUEFA D_VALUEFA SEAT01 SEAT02 SEAT03 SEAT04
7 LINE_B G_VALUEFA D_VALUEFA SEAT22 SEAT25 SEAT27 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8
7 LINE_C G_PREFX D_VALUEFX SEAT01 SEAT02 SEAT03 SEAT04
8 LINE_G G_PREFX D_VALUEFX POSITION55 POSITION82 VALUE85 POSITION44 POSITION448 POSITION448 POSITION448
7 LINE_C G_PREFA D_VALUEFA SEAT01 SEAT02 SEAT03

$ cat tst.awk
{
    for (i=1; i<=NF; i++) {
        printf "%s%s", $i, (i<NF ? (i%9 ? OFS : ORS "\t") : ORS)
    }
}

$ awk -f tst.awk file
7 LINE_A G_VALUEFA D_VALUEFA SEAT01 SEAT02 SEAT03 SEAT04
7 LINE_B G_VALUEFA D_VALUEFA SEAT22 SEAT25 SEAT27 EXNUM899999SSSSS9S8S5S2S8 EXNUM899999SSSSS9S8S5S2S8
        EXNUM899999SSSSS9S8S5S2S8
7 LINE_C G_PREFX D_VALUEFX SEAT01 SEAT02 SEAT03 SEAT04
8 LINE_G G_PREFX D_VALUEFX POSITION55 POSITION82 VALUE85 POSITION44 POSITION448
        POSITION448 POSITION448
7 LINE_C G_PREFA D_VALUEFA SEAT01 SEAT02 SEAT03

$ awk -f tst.awk file | awk '!/^\t/{++c} END{print c+0, "Lines processed"}'
5 Lines processed