我已经读了一些有关awk
。事实证明,它对于单个数据非常有用。假设我有两个输入文件:
## inp1
x y
1 3
2 4
6 9
...
## inp2
x z
1 5
2 19
6 9
我想输出一些“组合”两个文件的东西。就像是:
## output
x y z
1 3 5
2 4 19
6 9 9
我可以想到这样的想法,例如交错这两个文件:https : //stackoverflow.com/questions/4011814/how-to-interleave-lines-from-two-text-files并使用awk做一些事情。
或者也许是使用关联数组的东西?不过,我不太确定,这就是这个问题的原因;)。
我正在使用Linux。
听起来您只是想join
在第一个字段中加入文件:
$ join -j1 file1 file2
x y z
1 3 5
2 4 19
6 9 9
请注意,join
期望其输入进行排序,因此您可能需要执行以下操作:
$ join -j1 <(sort file1) <(sort file2 )
1 3 5
2 4 19
6 9 9
x y z
但是,这会弄乱您的标题,因此请避免执行以下操作:
$ join -j1 <(head -n1 file1) <(head -n2 file2); join -j1 <(tail -n+2 file1|sort) <(tail -n+2 file2 |sort )
x y z
1 3 5
2 4 19
6 9 9
并将其保存到新文件中:
( \
join -j1 <(head -n1 file1) <(head -n2 file2);
join -j1 <(tail -n+2 file1|sort) <(tail -n+2 file2 |sort ) \
) > newFile
或者,使用awk
:
$ awk 'NR==FNR{a[$1]=$2; next}{print $1,$2,a[$1]}' file2 file1
x y z
1 3 5
2 4 19
6 9 9
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句