2010年6月29日火曜日

FS = 読み込んだ行を列に分割する時の区切り文字 - AWK

AWKの文字列操作関数と関連機能
AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
読み込んだ行を列に分割する時の、区切り文字です。

o ファイルからの入力の他、split(文字列の分割)でも使います。


**** 書式
--------
FS
もしくは
FS = "読み込み用の列区切り文字"
--------

o FSは変数です。初期値は半角空白1文字(" ")。
o 読み込み用の列区切り文字 -- 正規表現です。前後の「/」は付けず、文字列の形で指定します。例 = "[ \t]"


**** 使用例
--------
BEGIN {
  FS = "[a]";
}
{
  # 例えば、入力行が「ミaク」の時
  print $1 $2 "さん"; # 「ミクさん」
}
--------

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


**** 機能
o 読み込んだ行を列に分割する時の、区切り文字です。
o 初期値は" "、半角空白1文字です。
o 次の時に使われます。
   + 関数を使わずに 1行読み込んだ時(= $1などの値を入れる時に使います)
   + getlineで、読み込んだデータを入れる変数を指定しなかった時(= $1などの値を入れる時に使います)
   + split(文字列の分割)で、区切り文字を指定しなかった時、かつ、この変数に値を代入した時
o Gawkの場合、ファイルから読み込む時に限り、変数FIELDWIDTHSと競合します。Gawkが行を読み込む時、最後に設定した方の値を使います。
o 文字列の形ですが、中身は「/」無しの正規表現で指定します。
o 半角空白以外の1文字だけ指定した時、通常は、[]で括った時と同じ意味になります。
   + FS = "a"; の指定は、FS = "[a]"; と同じです。
   + FS = "\t"; の指定は、FS = "[\t]"; と同じです。\tはタブ文字1文字の意味です。
   + 例外は、original = the one true awkでsplitを使用する時です。
o 半角空白を1文字だけ指定すると、"[ \t\n]+"の指定と同じになります。
   + 空白類が並んでいると、読み飛ばします。
o 空文字("")を指定すると、1文字ずつ取り出す事が出来ます。

** 処理系に依存する動作
o original = the one true awk(updated May 1, 2007)で、splitを使用する時、FSの値に \nの条件が加わります。
   + FS = "a"; の指定は、FS = "[a\n]"; と同じになります。
   + FS = "\t"; の指定は、FS = "[\t\n]"; と同じになります。
   + この動作は、ファイル入力する時とは異なりますので、ご注意下さい。


**** メモ
o original = the one true awk(updated May 1, 2007)の場合、コマンドラインの -F オプションとは動きが異なります。「t」をタブ文字に変換するような事はしません。


**** 確認した処理系
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プログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > OFMT = printを使って数値1つだけを書き出す時の書式
    CONVFMT = 数値を文字列に自動変換する時の書式
    > RS = 1行読み込む時の改行文字
    FILENAME = 現在読み込み中ファイルの名前
    +
    getline = ファイル(やパイプ)から1行読み込む
    split = 文字列を分割する
    IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
    FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    OFS = printを使って出力する時の列区切り文字
(2010年9月6日追加。空文字を指定した時の動作)