次の内容を含むファイル(ファイル1)があります。
2 test1
3 test2
2 test3
1 test1
4 test2
メインファイル(file2)もあります:
2 test1
3 test1
4 test1
2 test2
3 test2
4 test2
5 test2
...
ファイル1の列1と列2が一致する場合は、ファイル2のすべての行を印刷したいと思います。ファイル2の任意の形式を維持したいと思います。最良のアプローチは何ですか?
答え1
努力する
awk 'NR==FNR { a[$1 $2]=1 ; } NR>FNR { if ( $1 $2 in a ) print ;}'
どこ
NR==FNR
レコード数==ファイル内のレコード数(最初のファイルにあります){ a[$1 $2]=1 ; }
キーを保存する(スペースが接続されていません)NR>FNR
(私たちは2番目のファイルにあります)if ( $1 $2 in a )
インデックスが存在する場合...print
この行を印刷してください。
どちらがあなたにサンプルを提供しますか?
2 test1
3 test2
4 test2
答え2
awk 'n[$1][$2]++' file1 file2
両方のファイルに重複がないとします。
答え3
perl -lane '@ARGV and $h{"@F"}++,next; print if $h{"@F"}' file1 file2
出力
2 test1
3 test2
4 test2