匹配两个文件之间的两个字段 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的主要内容,如果未能解决你的问题,请参考以下文章

比较awk中两个文件的字段

awk grep 或 sed:如何匹配两个文件

AWK:使用两个匹配条件的文件和计数相等的唯一标识符

使用 awk 匹配两个不同文件中的数字

AWK 比较两个文件中的两列输出匹配行 - 匹配中缺少行

使用 awk 比较两个文件并打印不匹配的记录