如何使用 grep/awk/unix 匹配另一个文件中一个文件中的所有行,即使它们是重复的

如何使用 grep/awk/unix 匹配另一个文件中一个文件中的所有行,即使它们是重复的

我试图从文件中检索匹配行,但是具有“索引”或要检索的匹配列表的文件也有重复的条目,我也想打印出重复项。

例子:

文件 1(索引文件或要匹配的字符串列表)

abc
tgf
abc
ggg
aaa
fff

文件 2(我想要检索文件 1 中每个匹配项的内容)

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa

我想要的结果是(顺序并不重要,只是我匹配每一行):

Fred   1   3   abc
Dan    5   6   tgf
Fred   1   3   abc
Amy    2   4   ggg
Steve  2   1   aaa
Mike   9   1   fff

我很熟悉并尝试过 grep 如下,但它不会打印重复的条目。

grep -Fwf file1.txt file2.txt

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa

答案1

通过awk

awk 'NR==FNR{A[$4]=$0;next}{print A[$1]}' file2.txt file1.txt

sort通过以下方式编辑输出join

join -o 2.1 2.2 2.3 2.4 -2 4 <(sort file1.txt) <(sort -k4 file2.txt)

相关内容