一致する基本コードの文字列検索
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
ファイルの文字列と同じ各行のフィールド数を数えると、これを行うのは非常に簡単です。fileA
include.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