匹配两个文件之间的两个字段 AWK
Posted
技术标签:
【中文标题】匹配两个文件之间的两个字段 AWK【英文标题】:Matching two fields between two files AWK 【发布时间】:2016-12-09 14:19:47 【问题描述】:试图将字段 1,3 与另一个文件中的字段 1,2 匹配并打印第二个文件的行。第一个文件是制表符分隔的,第二个是 csv 分隔的。意外的令牌错误? 文件1
1 x 12345 x x x
文件2
1,12345,x,x,x
脚本
awk -F',' FNR==NRa[$1]=$1,$3; next ($1,$2 in a) print' file1 file2 > output.txt
【问题讨论】:
【参考方案1】:你几乎成功了!
awk 'NR==FNRfirst[$1]=$3;next $1 in firstif(first[$1]==$2)print' file1 FS="," file2
输出
1,12345,x,x,x
备注
-
由于两个文件的字段分隔符不同,我们在文件之间进行了更改。
此脚本假设每个文件的第一个字段是唯一的,否则脚本会中断
在文件之间查看[ switching field separator ]。
【讨论】:
FS的切换很优雅。 ;) 我借用了[ this ]答案的技术。 仍然有问题...我需要添加 -F',' 参数吗? @mxttgen31 有什么问题?您能否添加更多示例输入和预期输出? FS="," 做到了!谢谢!【参考方案2】:同样的想法,但不取决于第一个字段的唯一性,而是取决于对
$ awk 'NR==FNRa[$1,$3]; next ($1,$2) in a' file1 FS=, file2
1,12345,x,x,x
【讨论】:
打败我 ++ ;)^1
文件之间设置FS的好用处。以上是关于匹配两个文件之间的两个字段 AWK的主要内容,如果未能解决你的问题,请参考以下文章