2010年6月30日水曜日

RS = 1行読み込む時の改行文字 - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○(1文字のみ)awk
ファイル(やパイプ)から1行読み込む時の、改行文字です。

**** 書式
--------
RS
もしくは
RS = "改行文字"
--------

o RSは変数です。初期値は改行文字("\n")。
o 改行文字 -- 正規表現です。前後の「/」は付けず、文字列の形で指定します。例 = "[\r\n]+" (空行を読み飛ばす書き方)


**** 使用例
--------
BEGIN {
  RS = "+";
}
{
  # 例えば、入力ファイルが「ミクさん+リンちゃん+レン君+ルカ様」の時
  print $0 ; # 最初の行は「ミクさん」
}
--------

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


**** 機能
o ファイル(やパイプ)から1行読み込む時の、改行文字です。
o 初期値は改行文字("\n")です。
o 1文字だけ指定した時、全ての処理系で同じように動きます。
   + その動きは、正規表現に例えると、[]で括った時と同じです。
   + RS = "a"; の指定は、RS = "[a]"; と同じです。
   + RS = "\t"; の指定は、RS = "[\t]"; と同じです。\tはタブ文字1文字の意味です。
   + RS = " "; の指定は、RS = "[ ]"; と同じです。FSの時とは違います。
   + RS = ""; (= 空文字)の指定は、RS = "[\n][\n]"; と同じです。改行文字が2つ並ぶまでを1行とします。
      + 改行2つは、インターネットの通信で良く使われている記号です。


** 処理系に依存する動作
o mawk系、Gawk系の場合
   + 文字列の形ですが、中身は「/」無しの正規表現で指定します。
   + 2文字以上指定する事が出来ます。
o original = the one true awk(updated May 1, 2007)の場合
   + 常に、先頭の1字のみで判断します。
   + RS = "[\t];" と指定すると、先頭の「[」を行の区切り文字だと判断します。


**** メモ
o RS の値変更機能は、XMLや JavaScriptを扱う時に重宝しています。

o バックアップXMLや強力なJavaScriptライブラリは、処理の単純化やファイルサイズ縮小などの目的で、改行コードを必要最小限に抑えたり除去する事が良くあります。
o それらのデータを解析したり加工したい時、そのままの状態で開いても読み難いです。
o そこで、RSで行区切り文字(例えば、RS = ">")を設定して改行コードを加えると、読み易い形式に変換する事が出来ます。データ加工でタグを切り出す時にも、便利です。
o 具体例は「Bloggerのエクスポートファイルからテンプレートを取り出す方法


**** 確認した処理系
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) -- 最初の1文字のみ有効


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > FILENAME = 現在読み込み中ファイルの名前
    ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    OFS = printを使って書き出す時の列区切り文字
    +
    getline = ファイル(やパイプ)から1行読み込む
    FS = 入力行を列に分割する時の区切り文字
    RT = 最後に読み込んだ行の改行文字(Gawk専用)
    FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    ORS = printを使って書き出す時の改行文字
(2010年9月29日追加。メモ欄にてRSの便利な使い方)
(2010年9月7日変更。\n指定時の動作が間違っていたので削除。空文字指定時の動作を追加。)