比较两个文件以进行匹配,打印找到的所有匹配项

时间:2019-07-03 18:07:41

标签: awk

我正在尝试将File1的column1的每个条目与File2进行比较,并同时打印两者。 File1的Column1可能具有重复的条目。在重复输入的情况下,我只能看到一条输出行。但我都想要

我的代码是awk 'FNR==NR{a[$1]=$0;next}; $1 in a {print $0"\t"a[$1]}' File1.txt File2.txt

File1.txt

aa  c   d
aa  c   e

File2.txt

aa  5
aa  7
aa  9
bb  7
cc  1

预期产量

aa  5   aa  c   d
aa  7   aa  c   d
aa  9   aa  c   d
aa  5   aa  c   e
aa  7   aa  c   e
aa  9   aa  c   e

我的代码给了我

aa  5   aa  c   e
aa  7   aa  c   e
aa  9   aa  c   e

2 个答案:

答案 0 :(得分:1)

join命令就是这种情况:

$ join File{1,2}.txt
aa c d 5
aa c d 7
aa c d 9
aa c e 5
aa c e 7
aa c e 9

输出不完全是您想要的,所以让我们修复一下:

$ join File{1,2}.txt | awk '{$1 = $1 FS $NF FS $1; $NF = ""; print}'
aa 5 aa c d
aa 7 aa c d
aa 9 aa c d
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e

如果输入文件未排序,那么(假设您的shell是bash / ksh / zsh)

join <(sort File1.txt) <(sort File2.txt)

请参阅bash手册中的3.5.6 Process Substitution

答案 1 :(得分:1)

带有sort/join

$ join <(sort file2) <(sort file1) -o1.1,1.2,2.1,2.2,2.3

aa 5 aa c d
aa 5 aa c e
aa 7 aa c d
aa 7 aa c e
aa 9 aa c d
aa 9 aa c e