awk文字列一致2列

awk文字列一致2列

次の内容を含むファイル(ファイル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

関連情報