2016-06-21 61 views
2

我有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 

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

回答

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 
+0

'printf'没有必要:'打印$ 0,(在K A [K]: “ - ”?)'。 –

+1

@EdMorton谢谢你是对的。 ;-) – Kent

相关问题