別のファイルで複数のパターンを一致させます。

別のファイルで複数のパターンを一致させます。

一致する基本コードの文字列検索

cat fileA | grep -Fwf include.txt

include.listで少なくとも2つのパターンを一致させるためにコードをどのように使用できますか?

file A 
data1 khc001 khc002 vp005
data1 fbc001 cs004 khc001

include.txt
khc001
khc002

正しい出力ライン1:data1 khc001 khc002 vp005

次の例では、2つのパターンのみがリストされていますが、リストにはより多くのパターンが含まれているため、awk '/pattern1/ && /pattern2/'不適切です。

ベストアンサー1

awkファイルの文字列と同じ各行のフィールド数を数えると、これを行うのは非常に簡単です。fileAinclude.txt

awk 'NR == FNR { p[$1]; next }
     {
         c = 0
         for (i = 1; i <= NF; ++i) if ($i in p) c++
         if ( c >= 2 ) print
     }' include.txt fileA

まずinclude.txt、ファイルを読み、単語を連想配列のキーとして使用します。次に、2番目のファイルを読み取り、各行に対してフィールドを繰り返し、各フィールドをテストしてキーと一致することを確認します。

一致するたびにカウンタをインクリメントし、カウンタが2以上の場合はその行を印刷します。


「単調さ」が好きな人のためにコードを表現する別の方法は次のとおりです。

awk 'NR==FNR {p[$1];next} {c=0;for (i=1;i<=NF;++i) if ($i in p) c++} c>=2' include.txt fileA

おすすめ記事