ファイル1
a 1
a 2
a 3
b 2
b 3
b 4
b 5
ファイル2
2
4
3
1
出力
a 1
a 2
a 3
ファイル1から「b」の値を削除するには、2番目の列(ファイル1の「5」)の「b」に対応する値の1つがファイル2にないため、「a」の値を保持するだけです。 。
したがって、基本的には、同じパターンの最初の列に基づいてfile1のサブセットを作成し、その2番目の列の値を使用してインデックス配列を作成し、2番目のファイルから取得する必要があります。 2番目のファイルから値が欠落している場合は、サブセット全体を削除したいと思います。
file1の2番目の列の値がfile2の最初の列の値と一致する行を抽出できます。最初の列と配列インデックスに基づいてサブセットを作成する方法を学びたいと思います。
当分の間、私はこれを2つの簡単なステップで行いました。
最初のステップ:
awk '{print $1}' file1| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort > file1_modified.txt
output:
3_a
4_b
ステップ2:file2の値がpf file1の2番目の列にある場合は、file1の行を印刷し、file1_modified.txtと比較して一致する行を取得し、出力を使用してfile1から行を抽出します。
awk 'FNR==NR{a[$1];next}($2 in a){print}' file2 file1|awk '{print $1}'| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort|comm -12 - file1_modified.txt| awk '{FS="_"}{print $2}'| grep -f - file1
output:
a 1
a 2
a 3
より良い方法で説明できることを望み、誰かがアドバイスを提供できる場合は役に立ちます。