AWK:比较两个文件中的两个不同列

标签 awk

我有这两个文件

文件1:

9 8 6 8 5 2
2 1 7 0 6 1
3 2 3 4 4 6

File2:(超过400万行)
MN 1 0
JK 2 0
AL 3 90
CA 4 83
MK 5 54
HI 6 490

我想比较 file1 的字段 6,比较文件 2 的字段 2。如果它们匹配,则将 file2 的字段 3 放在 file1 的末尾
我查看了其他解决方案,但无法正常工作。

期望的输出:
9 8 6 8 5 2 0
2 1 7 0 6 1 0
3 2 3 4 4 6 490

我的尝试:
awk 'NR==FNR{a[$2]=$2;next}a[$6]{print $0,a[$6]}' file2 file1

程序在那之后就挂了。

最佳答案

如果可用,要使用匹配打印 file1 中的所有行:

$ awk 'FNR==NR{a[$2]=$3;next;} {print $0,a[$6];}' file2 file1
9 8 6 8 5 2 0
2 1 7 0 6 1 0
3 2 3 4 4 6 490

只打印匹配的行:
$ awk 'NR==FNR{a[$2]=$3;next} $6 in a {print $0,a[$6]}' file2 file1
9 8 6 8 5 2 0
2 1 7 0 6 1 0
3 2 3 4 4 6 490

请注意,我替换了 a[$2]=$2a[$2]=$3并更改了测试 a[$6] (如果值为零则为假)到 $6 in a .

关于AWK:比较两个文件中的两个不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735586/

相关文章:

awk - 如何匹配模式然后复制多行?

regex - 当新行在数据中时计算txt文件中的行数

linux - awk 更新到 txt

linux - grep 中间带有通配符的文本

linux - 如何在一行中重复数据的末尾放置序号?

perl - 如何让 iostat 表现得像 top

awk - awk 中的多行注释

unix - awk 比较两个文件中的列,估算另一列的值

arrays - 将字符串直接拆分为数组

perl - 复制第一个空行之前的所有内容