単一の列と単語のリストの一致に基づいて、ファイルからいくつかの行を抽出したいと思います。
awkでは、次のようなものを使用できます。
awk '$5 == "someword" {print}' file.txt
私は次のようにgrepを使用できることを知っています。
grep -f listofwords.txt file.txt
ファイルの単一列に基づいて単語のリストを特定する方法を教えてください。
はい
A something something2
B something2 something3
C something3 something4
D something4 something5
G something5 something6
私が望むのは、列2に基づく単語ベクトルです。
something
something4
希望の出力:
A something something2
D something4 something5
答え1
私にとって、これはawkの一般的なユースケースのようです。
awk 'NR == FNR { keywords[$1]=1; next; }
{ if ($2 in keywords) print; }' listofwords.txt file.txt
"NR == FNR"条件がtrueの場合、2つのファイルをawkに渡します(レコード数は現在のファイルのレコード数と同じです。これは最初のファイルを読み込んでいることを意味します)。その後、リストを保存します。 「キーワード」配列のキーワードを選択し、次のレコードに移動します。別の(包括的な)条件は、(file.txtの)フィールド2がキーワードの1つであることを確認し、そうであればその行を印刷します。
答え2
while
リスト内の各文字列には単語の境界が必要なので、ループを使用できます。
while read -r list; do
grep -E "^[^ ]* +$list\>[^ ]* +.*$" input_file
done < list_file
A something something2
D something4 something5
または
$ grep -Ee '^[^ ]* +something\>[^ ]* +.*$' -e '^[^ ]* +something4[^ ]* +.*$' input_file
A something something2
D something4 something5