複数行を含む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行を印刷します。