我有两个文件:
File1:
234 235 283
567
1001
1002 1009
file2:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
I want in the output the rows in file2 be grouped similar to file 1:
output:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
在最终输出中,组中的数字之间不应该有任何空格,并且第一行也不应该再存在:最终输出:
112 1 2 01
000 0 0 22
122 2 2 22
请问有什么建议吗?
答案1
$ awk 'FNR==NR{n+=NF;a[n]=" ";next} FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}' file1 file2
112 1 2 01
000 0 0 22
122 2 2 22
怎么运行的
我们首先读取file1
并使用每行上的字段数来确定应在输出中插入空格的位置。然后,我们读取 file2 并插入空格。
FNR==NR{n+=NF;a[n]=" ";next}
该命令在读取第一个文件时执行。
NF
是当前行上的字段数。n
是看到的字段的累积数量。我们a
为每个插入一个空格到数组中n
。 (其他值将默认为空字符串。)FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}
对于第一行之后的行,我们打印每个字段,编号
i
后跟a[i]
。当我们打印了该行上的所有字段后,我们使用print
打印换行符。