我有这两个文件
文件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]=$2
与 a[$2]=$3
并更改了测试 a[$6]
(如果值为零则为假)到 $6 in a
.
关于AWK:比较两个文件中的两个不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735586/