2つのファイルをGrepし、複数のヒットを含む行を印刷します。

2つのファイルをGrepし、複数のヒットを含む行を印刷します。

2つのファイルがあります。

  • file1.txt
    abc
    def
    ghi
    jkl
    mno
    pqr
    
  • file2.txt
    abc ghi
    abc xyz
    xyz xyz
    mno jkl
    def stu
    

(列区切り記号はタブです)

私はfile1.txt次のようにgrepしようとしています。file2.txt

grep -w -f file1.txt file2.txt

次の結果が表示されます。

abc     ghi
abc     xyz
mno     jkl
def     stu

しかし、私が望むのは出力です両方以下のように、列1と列2file2.txtに照会があります。file1.txt

abc     ghi
mno     jkl

どんな助けでも歓迎します。

ありがとうございます。

クマ

ベストアンサー1

各値をfile1.txt配列に保存しますa。次に、file2.txt最初のフィールドと2番目のフィールドの両方を含む行を解析して印刷しますa

awk 'NR==FNR{a[$0];next}$1 in a && $2 in a' file1.txt file2.txt

のフィールド数に関係なく、file2.txtすべてのフィールドを繰り返して検査を実行します。フィールドのいずれかがにない場合は次の行にa進み、そうでない場合はその行を印刷します。

awk 'NR==FNR{a[$0];next}{for(i=1;i<=NF;i++){if(!($i in a)){next}}print}' file1.txt file2.txt

おすすめ記事