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)

関連情報