awk 匹配同一行中两个文件中的两个字段

标签 awk

我想查找 file1 中的字段 1 和 2 与 file2 中的字段 1 和 4 匹配的行,然后打印这些字段与 file2 中的字段匹配的所有行。我正在使用:

awk 'FNR==NR{a[$1];b[$2];next} $1 in a && $4 in b' file1 file2 > output

我遇到了一个问题,输出包含两个文件中字段匹配的行,但不在同一行中。例如,当行(如下)位于 file1 中时:

15     70589272    rs12148337     15     70589272    rs12148337            1 

行(下面)位于 file2 中:

10  rs181419901 0   70589272    4   2

即使字段 1 不匹配,输出也包含文件 2 中的行(上面)。表面上是因为 field1 确实在另一行中匹配。我可以限制命令打印两个字段仅在同一行内匹配的行吗?

最佳答案

你已经非常接近了:

awk 'FNR==NR{a[$1,$2];next} ($1,$4) in a' file1 file2

关于awk 匹配同一行中两个文件中的两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090908/

相关文章:

python - 两个文件的文本处理

bash - 用特定字符填充行,直到它包含给定数量的字符

bash - 所有列的所有行的总和 - Bash

bash - 如何使用 sed 或 awk 在模式后删除某些字符?

awk - 比较两个文件中的列并打印特定列中的匹配值

linux - Awk 命令无法正常工作,输出错误,sed 命令?

shell - 通过拆分行来运行 awk

linux - 在 shell 脚本中对日期进行验证

sorting - 如何使用 awk 按长度对行进行排序?

regex - 从文本文件中提取所有数字并将它们存储在另一个文件中