Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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