awkガナス

第4回 組み込み変数NF(フィールド数) NR(行番号)

2015.07.08

今回は組み込み変数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
..

著者プロフィール

naka

すきなコマンドは awk と bc です。なにかを計算する時、awk か bc を使います。

記事一覧Index