特定のフィールドに基づいて2つの異なるファイルから一意の行を見つける

特定のフィールドに基づいて2つの異なるファイルから一意の行を見つける

複数行を含む2つのtxtファイルを比較し、ファイル1に固有の行のみを含む3番目のtxtファイルを作成する必要があります。ファイル1の例は次のとおりです。

../../A/folder/fname.gz | -12.36 | A:BCD:123:A, D:DFR:241:AZ1 
../../A/folder/fname2.gz | -4.56 | B:ABC:456:C | G:RFT:265:T

数千行にわたって続き、ファイル2の例は次のとおりです。

../../B/folder2/fname.gz | -7.65 | C:ABC:425:A
../../B/folder2/fname3.gz | -12.31 | A:BCD:758:D

../../folder/fname2.gz例のように、最初のフィールドに基づいて一意のファイル1のすべての行を取得する必要があります。異なるfolder場合がありますが、固有でなければfnameX.gzなりません。folder両方ともおよび/またはをfname含みます。各行のフィールド数は異なる場合があります。上記の例の予想出力は次のとおりです。-_

../../A/folder/fname2.gz | -4.56 | B:ABC:456:C | G:RFT:265:T

これを行う最良の方法は何ですか?

ベストアンサー1

awk -F ' *[|] *' '{ k=$1; sub(".*/", "", k) }
               !z { a[k]; next } !( k in a )' file2 z=1 file1

まず読み込み、file2ファイル名部分を配列に保存します。読み込み時にfile1ファイル名が配列にない場合は、1行を印刷します。

おすすめ記事