私の問題の簡略化されたバージョンは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
て、次の操作を行いますbash
。sort
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
file1
file2
ただし、これは直前ではなく行のどこからでもキーを検索します=
。実際のデータでは機能しない可能性があります。