比较两个文件中的两列" awk"

时间:2017-03-09 15:46:20

标签: awk merge compare

我想在awk中比较$ 1,$ 2列的两个文件。如果相同的打印全部来自第二个文件,如果不相同则从第一个文件打印。

第一档:

  

a 1 2

     

b 2 3

     

c 3 4

第二档:

  

1 2 ko lo to

     

b 2 3 to ho ro

结果:

  

1 2 ko lo to

     

b 2 3 to ho ro

     

c 3 4

所以我想在第一个文件中添加与第二个文件不匹配的行。

我写道:

 awk -v OFS="\t" 'FNR==NR{a[$1]=$2=$3;next} {if (($1,$2) in a) print a[$1,$2,$3]; else print $0}'

但它不起作用:-( 谢谢。

1 个答案:

答案 0 :(得分:3)

awk救援!

$ awk '!a[$1,$2]++' file2 file1

a 1 2 ko lo to
b 2 3 to ho ro
c 3 4

这不会保留订单(它将首先打印file2内容)。另一种选择是

$ awk    '{k=$1 FS $2} 
  NR==FNR {a[k]=$0; next} 
          {print (k in a?a[k]:$0)}' file2 file1