首页 > 解决方案 > 合并某些列匹配的文件

问题描述

匹配两个文件中的第 1、2、3 列,如果它们相等。

对于列匹配的文件,将 file1 中第 4 列的值写入 file2 如果不匹配,则写入 NA

文件 1

31431 37150 100 10100
31431 37201 100 12100
31431 37471 100 14100

文件2

31431 37150 100 14100
31431 37131 100 14100
31431 37201 100 14100
31431 37478 100 14100
31431 37471 100 14100

期望的输出:

31431 37150 100 14100 10100
31431 37131 100 14100 NA
31431 37201 100 14100 12100
31431 37478 100 14100 NA
31431 37471 100 14100 14100

我试过

awk '
FNR==NR{
  a[$1 $2 $3]=$4
  next
}
($1 in a){
  $1=a[$1]
  found=1
}
{
  $0=found==1?$0",":$0",NA"
  sub(/^...../,"&,")
  $1=$1
  found=""
}
1
' FS=" " file1 FS=" " OFS="," file2

标签: awk

解决方案


$ awk '      {k=$1 FS $2 FS $3} 
     NR==FNR {a[k]=$4; next} 
             {$(NF+1)=k in a?a[k]:"NA"}1' file1 file2

31431 37150 100 14100 10100
31431 37131 100 14100 NA
31431 37201 100 14100 12100
31431 37478 100 14100 NA
31431 37471 100 14100 14100

推荐阅读