今回は組み込み変数NF,NRについて書きます。
- NF(number of fields in the current record)
- NR(current record number in the total input stream)
組み込み変数NF(フィールド数)¶
組み込み変数NFは現在行のフィールド数が入っています。
% ls -l /bin/| awk '{print NF, $0}'
2 合計 9496
9 -rwxr-xr-x 1 root root 986672 9月 27 2014 bash
9 -rwxr-xr-x 3 root root 30240 10月 21 2013 bunzip2
9 -rwxr-xr-x 1 root root 1713424 11月 15 2013 busybox
9 -rwxr-xr-x 3 root root 30240 10月 21 2013 bzcat
11 lrwxrwxrwx 1 root root 6 10月 21 2013 bzcmp -> bzdiff
9 -rwxr-xr-x 1 root root 2140 10月 21 2013 bzdiff
..
NF に $ をつけると最後のフィールドを表すのでフィールド数が異なる行で最後のフィールドを表示する時に便利です。
シンボリックリンク(bzcmp->bzdiff)のようにフィールド数が異なる行も最後のフィールド(bzdiff)を表示しています。
% ls -l /bin/| awk '{print $NF}'
9496
bash
bunzip2
busybox
bzcat
bzdiff
bzdiff
bzgrep
bzexe
bzgrep
..
組み込み変数NR(行番号)¶
組み込み変数NRには行番号が入っています。
% ls -l /bin/| awk '{print NR,$0}'
1 合計 9496
2 -rwxr-xr-x 1 root root 986672 9月 27 2014 bash
3 -rwxr-xr-x 3 root root 30240 10月 21 2013 bunzip2
4 -rwxr-xr-x 1 root root 1713424 11月 15 2013 busybox
5 -rwxr-xr-x 3 root root 30240 10月 21 2013 bzcat
6 lrwxrwxrwx 1 root root 6 10月 21 2013 bzcmp -> bzdiff
..
配列の添字に使用するとファイルの内容をまるごとコピーできるので逆順表示もできます。
% ls -l /bin/| awk '{line[NR]=$0}END{for(i=NR;i>0;i--)print i,line[i]}'
154 -rwxr-xr-x 1 root root 5049 1月 10 2014 znew
153 -rwxr-xr-x 1 root root 1912 1月 10 2014 zmore
152 -rwxr-xr-x 1 root root 2039 1月 10 2014 zless
151 -rwxr-xr-x 1 root root 5940 1月 10 2014 zgrep
150 -rwxr-xr-x 1 root root 2133 1月 10 2014 zforce
..