如何根据第二个文件中的信息对第一个文件中的信息进行分组?

如何根据第二个文件中的信息对第一个文件中的信息进行分组?

我有两个文件:

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打印换行符。

相关内容