打印所有文件行和其他文件中的匹配行

时间:2016-06-21 11:48:05

标签: file awk grep

我有file1和file2。我想打印file1的所有行,如果:file1的第1列和第2列与file2的第1列和第2列匹配,则:将该行从file2添加到file1的行。

File1:
1  30  40  name  info
1  3  2  desc  info
1  3  2  id  info
10  35  45  name  info 

File2: 
20 30 40 numbers  desc
1  3  2  desc name 

Result:
1  30  40  name  info  -
1  3  2  desc  info  desc name 
1  3  2  id  info  desc name 
10  35  45  name  info  -  

我做了这段代码:

awk 'NR==FNR {h[$1,$2]=$0;next}{print h[$1,$2],$0}' file1.txt file2.txt > result.txt

但它只打印匹配的行,我想要所有的行。

1 个答案:

答案 0 :(得分:4)

这个awk单行应该有所帮助:

awk '{k=$1 FS $2}
  NR==FNR{a[k]=$4FS$5;next}{printf "%s %s\n", $0, (k in a?a[k]:"-") }' file2 file1