file.dat
スペースで区切られた多くの列を含むテキストファイルがあります。 2番目の列には数字があります。select.dat
数値リストを含む他のテキストファイルがあります。file.dat
2番目の列の数字がに含まれるように、最初のテキストファイル()から行を選択したいと思いますselect.dat
。その中に含まれる数字が別の列に存在する可能性があるgrep -f selected.dat file.dat
ため、使用すると機能しません。select.dat
しかし、2番目の列にこの数字を含む行だけを選択したいと思います。どうすればいいですか?
答え1
使用awk
。 awk
連想配列を使用すると、select.dat
値を割り当てなくても数値をキーとして配列を作成できます。その後、簡単な確認「___ in <arrayname>
」をフィルタとして使用して、印刷する内容を決定できます。
NR
「レコード番号」を示し、FNR
「ファイルレコード番号」を示します。このテストは、FNR == NR
本質的に「まだ最初のファイルを処理していますか?」を意味します。したがって、次のコードは、最初の指定されたファイルの行をキーとして使用して配列(値なし)を構築します。次に、生成された配列内の2番目のフィールドが見つかった2番目のファイルの行のみを印刷します。
awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat