2010年6月30日水曜日

NF = 最後に読み込んだ行の列数 - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
最後に読み込んだ行の列数です。
o AWKは1行読み込むと、自動的に列に分割して、$1、$2、$3、、、に値を入れます。
o 行全体のデータは、$0に入っています。

**** 書式
--------
NF
--------

o NFは変数です。


**** 使用例
--------
{
  for (i = 1; i <= NF; ++i) {
    print $i "、おはようございます。";
  }
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。

o 入力データ
--------
ミクさん リンちゃん レン君 ルカ様
--------



**** 機能
o 最後に読み込んだ行の列数です。
   + 列の区切り文字は、通常「半角空白、タブ(、改行文字)」ですが、FSで変更出来ます。
o この変数に値を代入すると、$0の値を自動変更(= 再構築)する処理系があります。
   + mawk, Gawkで列数を調整したい時に便利です。
o また、この変数に負の値にすると、強制終了する処理系があります。

o 次の操作は、NFの値を変更します。
   + 関数を呼び出さずに、1行読み込んだ時
   + getlineを、引数無しで呼び出した時
   + $0、$1など変数「$ + 数字」に値を代入した時
      + $0を更新した時は、自動的に$1などとNFが再設定されます。
      + $1など、数字が1以上の時は、その数字が NFよりも大きなときに限り、NFにその数字を設定します。
      + $1 = $1のように同じ値を代入しても、同じ動きをします。
   + NFの値を直接上書きした時


** 処理系に依存する動作
o この変数に値を代入した時、$0の値を自動変更(= 再構築)する処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + mawk MBCS (32bit版) 1.3.3
   + Mawk for Windows 1.3.3
   + この時、各列の間にある区切り文字を、変数OFSの値で置き換えます。
   + NF = NFのように同じ値を代入しても、同じ動きをします。
   + これらの処理系では、NFを負の値にすると、強制終了します。
o この変数に値を代入した時、$0の値を変更しない処理系
   + original = the one true awk(updated May 1, 2007)
   + この処理系では、NFの値が負になっても、$0の値を参照する事が出来ます。


**** メモ
o 最後の列のデータを取り出す時は、$NF と書く方法が簡単です。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > RT = 最後に読み込んだ行の改行文字
    FNR = 現在読み込み中のファイルから読み込んだ行数
    NR = これまでに読み込んだ行数
    +
    ファイルからデータを読み込む
    $0 = 最後に読み込んだデータ、1行分
    $1 = 最後に読み込んだデータの1列目
(2010年9月9日追加。$0や$1との関係と負の値)