数値リストから数字を含むファイルの行を選択する方法

数値リストから数字を含むファイルの行を選択する方法

file.datスペースで区切られた多くの列を含むテキストファイルがあります。 2番目の列には数字があります。select.dat数値リストを含む他のテキストファイルがあります。file.dat2番目の列の数字がに含まれるように、最初のテキストファイル()から行を選択したいと思いますselect.dat。その中に含まれる数字が別の列に存在する可能性があるgrep -f selected.dat file.datため、使用すると機能しません。select.datしかし、2番目の列にこの数字を含む行だけを選択したいと思います。どうすればいいですか?

答え1

使用awkawk連想配列を使用すると、select.dat値を割り当てなくても数値をキーとして配列を作成できます。その後、簡単な確認「___ in <arrayname>」をフィルタとして使用して、印刷する内容を決定できます。

NR「レコード番号」を示し、FNR「ファイルレコード番号」を示します。このテストは、FNR == NR本質的に「まだ最初のファイルを処理していますか?」を意味します。したがって、次のコードは、最初の指定されたファイルの行をキーとして使用して配列(値なし)を構築します。次に、生成された配列内の2番目のフィールドが見つかった2番目のファイルの行のみを印刷します。

awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat

関連情報