使用包含许多列的awk比较两个文件,并获取数据不同的列

时间:2018-04-27 10:07:29

标签: bash unix awk compare

文件1:

field1|field2|field3|
abc|123|234
def|345|456
hij|567|678

file2:

field1|field2|field3|
abc|890|234
hij|567|658

期望的输出:

field1|field2|field3|
abc|N|Y
def|345|456
hij|Y|N

我需要比较。如果字段匹配,则将shld放在Y中,否则输出文件中的N.

1 个答案:

答案 0 :(得分:0)

使用awk,您可以尝试:

awk -F '|' 'FNR == NR {
   p = $1
   sub(p, "")
   a[p] = $0
   next
}
{
   if (FNR > 1 && $1 in a) {
      split(a[$1], b, /\|/)
      printf "%s", $1 FS
      for (i=2; i<=NF; i++)
         printf "%s%s", ($i == b[i] ? "Y" : "N"), (i == NF ? ORS : FS)
   }
   else
      print
}' file2 file1

field1|field2|field3|
abc|N|Y
def|345|456
hij|Y|N

Code Demo