を使用したファイル比較を学習していますawk
。
以下のような構文を見つけました。
awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2
この場合の の意味が理解できませんでしたNR==FNR
。 を試してFNR==NR
も同じ出力が得られますか?
それは具体的に何をするのでしょうか?
ベストアンサー1
Awk の場合:
FNR
現在のファイル内のレコード番号 (通常は行番号) を参照します。NR
総レコード数を指します。- この演算子は
==
比較演算子であり、周囲の 2 つのオペランドが等しい場合に true を返します。
これは、条件NR==FNR
が通常はこれは最初のファイルに対してのみ当てはまります。FNR
各ファイルの最初の行では 1 にリセットされますが、NR
増加し続けます。
このパターンは通常、最初のファイルに対してのみアクションを実行するために使用されます。これは、最初のファイルが空でないことを前提として機能します。そうでない場合、Awk が 2 番目のファイルを処理している間、2 つの変数は等しくなります。
next
ブロック内は、それ以降のコマンドがスキップされることを意味します。そのため、最初のファイル以外のファイルに対してのみ実行されます。
条件はFNR==NR
と同じ 2 つのオペランドを比較するためNR==FNR
、同じように動作します。