1. ホーム
  2. awk

複数のファイルからの入力を処理するためにAWKを使用する

2023-12-09 16:51:50

質問

複数の入力ファイルを一度にAWKするために、多くの人が以下の解決策を投稿してくれてとても助かっています。

$ awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2 file1

これはうまく動作しますが、誰かが私に理由を説明してくれるでしょうか? 私はAWKの構文を理解するのが少し難しいと感じており、誰かが私のためにコードスニペットを分解することを気にしないだろうと期待していました。

どのように解決するのですか?

awk 'FNR==NR{a[$1]=$2 FS $3;next}

ここでは1番目の入力(file2)を処理します。FSがスペースであるとすると、配列を構築します( a ) を作り、インデックスをカラム1、値を column2 " " column3 である。 FNR==NR and next は、この部分がfile2に対してのみ動作することを意味します。

{ print $0, a[$1]}' file2 file1

いつ NR != FNR ここでは、file1 の行を表示し、column1 をインデックスとして、array(a) print で値を求めています。

NRとFNRについて、簡単に説明します。

1st input has 5 lines
2nd input has 10 lines,

NR would be 1,2,3...15
FNR would be 1...5 then 1...10

のトリックが見えますね。 FNR==NR をチェックします。