あるファイルからキーと値のペアを取得し、別のファイルからキーリストを取得する

あるファイルからキーと値のペアを取得し、別のファイルからキーリストを取得する

私の問題の簡略化されたバージョンはfile2キーですfile1

たとえば、

file1(鍵付き)

a
d
f

file2(キーバリハリ含む)

a=1
b=2
c=3
d=4
f=5
g=6

予想出力:

a=1
d=4
f=5

私が試したこと:

cat file1 | xargs -I % grep "^%=" file2

このアプローチはうまく機能しますが、ファイルが大きいとパフォーマンスが低下します。 (たとえば、file1には12kラインがあり、file2には20kラインがあります)

最良のアプローチは何ですか?

答え1

awkを試してみてください。

$ awk 'NR==FNR{keys[$1]; next} $1 in keys' file1 FS='=' file2
a=1
d=4
f=5

答え2

GNUを使用しjoinて、次の操作を行いますbashsort

join -t '=' <(sort file1) <(sort file2)

出力:

a=1
d=4
f=5

答え3

grep -fこれがすることです:

$ grep -f file1 file2
a=1
d=4
f=5

file1file2ただし、これは直前ではなく行のどこからでもキーを検索します=。実際のデータでは機能しない可能性があります。

関連情報