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

jpa*_*mer 2 grep awk gawk

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

例子:

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

abc
tgf
abc
ggg
aaa
fff
Run Code Online (Sandbox Code Playgroud)

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

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa
Run Code Online (Sandbox Code Playgroud)

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

Fred   1   3   abc
Dan    5   6   tgf
Fred   1   3   abc
Amy    2   4   ggg
Steve  2   1   aaa
Mike   9   1   fff
Run Code Online (Sandbox Code Playgroud)

我很熟悉,并按如下方式尝试了 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
Run Code Online (Sandbox Code Playgroud)

Cos*_*tas 7

通过 awk

awk 'NR==FNR{A[$4]=$0;next}{print A[$1]}' file2.txt file1.txt
Run Code Online (Sandbox Code Playgroud)

sort通过 ed 输出join

join -o 2.1 2.2 2.3 2.4 -2 4 <(sort file1.txt) <(sort -k4 file2.txt)
Run Code Online (Sandbox Code Playgroud)