[awk] NR==FNR を使って2つのファイルを突合する

作成日: 2026年09月21日

awk では NR==FNR を使うと、最初のファイルを読み込んでいる間だけ処理を分けることができます。最初のファイルの内容を連想配列に保存しておくと、2つ目のファイルとキーで突合できます。

例えば、names.txt を下記の内容で作成します。

1 apple
2 orange

続いて、prices.txt を下記の内容で作成します。

1 120
2 150

下記のコマンドを実行します。

awk 'NR==FNR {name[$1]=$2; next} {print name[$1], $2}' names.txt prices.txt

実行結果は下記のとおりです。

apple 120
orange 150

NR は処理した全行数、FNR は現在のファイル内の行番号です。最初のファイルを処理している間は両者が同じ値になるため、NR==FNR の処理だけが実行されます。

name[$1]=$2 で names.txt の1列目をキー、2列目を値として連想配列に保存します。next でその行の残りの処理を飛ばし、2つ目の prices.txt では保存した値と2列目を出力します。

awk Shell command