awk - 合并某些列匹配的文件
问题描述
匹配两个文件中的第 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 ' {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
推荐阅读
- reactjs - 您正在一个已经运行 ES 模块构建的页面上加载 React Router 的 CommonJS 构建,所以事情不会正常工作
- java - 通过聚合键将映射映射到单个映射
- typescript - Firestore 安全规则中的单元测试时间戳字段规则
- javascript - 还有另一种方法可以对数组中的整数进行排序吗?
- javascript - Twitter typeahead.js - 使用对象数组
- regex - 正则表达式正后看数字
- python - 如何同时访问特定列和随机
- java - 将 ArrayList 克隆到另一个 ArrayList 在 DP 中不起作用
- json - 颤振给我尝试捕捉的例外
- regex - 用于捕获组但忽略某些相似模式的 Dart 正则表达式