我正在尝试比较两个不同的文件,让我们以这种方式说“file1”和“file2”。 如果两个文件中$ 2和$ 3的字段相同,则打印file2的$ 0。这是一个例子:
file1
E 352 697
E 25 692
E 510 744
file2
E 335 705 1 1
E 267 792 1 2
E 365 395 1 3
E 25 692 1 4
E 566 624 1 5
E 227 358 1 6
E 516 554 1 7
E 510 744 1 8
E 234 790 1 9
E 352 697 1 10
期望的输出:
E 352 697 1 10
E 25 692 1 4
E 510 744 1 8
请注意,file1中的所有情侣$ 2,$ 3都包含在file2中,输出文件的行数与file1相同。 我知道有很多类似问题的问题,但所有答案都没用。 我试过用:
awk 'FNR==NR {a[$2]; b[$3]; next} $2 in a && $3 in b' file1 file2 > output
它可以工作,但在输出文件中有额外的行。你可以帮帮我吗?谢谢!
答案 0 :(得分:3)
awk 'NR==FNR{a[$2,$3];next} ($2,$3) in a' file1 file2
答案 1 :(得分:2)
此awk
应该:
awk 'FNR==NR {a[$0];next} {for (i in a) if ($0~i) print}' file1 file2
E 25 692 1 4
E 510 744 1 8
E 352 697 1 10
它将file1
存储在数组a
中。然后循环通过file2
并测试它是否包含数组a
中的数据,如果是,则打印该行。