Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

NRとFNRのちがい

NRとFNRのちがいは、
NRが通し番号なのに対して、FNRがファイル毎に振られる番号であるという点があります。

実際のところ

以下のようなファイルがあったとします。

$ tail 111.txt 000.txt
==> 111.txt <==
abc withdrawal
def payment
xyz deposit
xxx balance

==> 000.txt <==
20081010 1123 xxx
20081011 1234 def
20081012 0933 xyz
20081013 0512 abc
20081013 0717 def

ためしに、NRとFNRを描写させると、ちゃんと番号が違っている事が確認できます。

$ gawk '{print NR":"FNR}' 111.txt 000.txt
1:1
2:2
3:3
4:4
5:1
6:2
7:3
8:4
9:5

これを生かして、「最初のファイルに置換表」、「次のファイルに置換対象」といった運用が可能です。
ひとつのawkファイルで完結するのでif-else地獄にならず済みますね。

$ gawk 'NR==FNR{a[$1]=$2}  NR!=FNR{$3 = a[$3]; print} ' 111.txt 000.txt
20081010 1123 balance
20081011 1234 payment
20081012 0933 deposit
20081013 0512 withdrawal
20081013 0717 payment