在论坛上看到的问题,记录下
[/tmp/test]# cat tt6
aa 1 2
bb 2 3
cc 3 4
[/tmp/test]# cat tt7
aa 2 1
bb 8 2
cc 4 4
dd 5 5
想将tt6,tt7内容合并为
cc 3 4 4 4
aa 1 2 2 1
bb 2 3 8 2
最开始想到到awk将两个文本的内容进行合并
[/tmp/test]# awk 'NR==FNR{a[$1]=$2" "$3}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7
aa 1 2 1 2
bb 2 3 2 3
cc 3 4 3 4
aa 2 1 1 2
bb 8 2 2 3
cc 4 4 3 4
发现内容重复了.
加上next之后输出ok
[/tmp/test]# awk 'NR==FNR{a[$1]=$2" "$3;next}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7
#next表示跳过后面的代码,继续读取下行的record
aa 2 1 1 2
bb 8 2 2 3
cc 4 4 3 4
[/tmp/test]# awk 'NR==FNR{a[$1]=$2" "$3;next}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7 | awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;i++){print a[i]}}'
合并内容可以使用join,这样更方便使用[/tmp/test]# join tt6 tt7
aa 1 2 2 1
bb 2 3 8 2
cc 3 4 4 4
[/tmp/test]# join tt6 tt7 | awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;i++){print a[i]}}'
cc 3 4 4 4
aa 1 2 2 1
bb 2 3 8 2
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24237320/viewspace-2090055/
,如需转载,请注明出处,否则将追究法律责任。