2010年6月30日水曜日

system = OSのコマンドを実行して、終了コードを返す - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ×Mawk ○awk
OSのコマンドを実行して、終了コードを返します。

**** 書式
--------
system( [実行するコマンド] )
--------

o 実行するコマンド -- 文字列の形で指定します。


**** 使用例(Windowsの場合)
o UNIXの方は、"date /t"の部分を、"ls"などに置き換えてみて下さい。
--------
BEGIN {
  v = system("date /t");
  print "コマンドのリターンコード = (" v ")";
}
--------

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


**** 機能
o OSのコマンドを実行して、終了コードを返します。
o 但し、systemをサポートしていない処理系があります。
   + Mawk for Windows 1.3.3では、実行せずに、終了コード(127)を返します。(= Windows XP SP3で確認)


**** メモ
o コマンドを実行する方法は、他にもあります。getlineでパイプを実行する方法です。


**** 確認した処理系
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
    ▼制作メモ
    > $0 = 最後に読み込んだデータ、1行分
    $1 = 最後に読み込んだデータの1列目
    NF = 最後に読み込んだ行の列数
    +
    exit = 終了する

FILENAME = 現在読み込み中ファイルの名前 - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
現在読み込み中ファイルの名前です。
o これから読み込むファイル名を変更したい時は、ARGVARGCを変更します。

**** 書式
--------
FILENAME
--------

o FILENAMEは変数です。
o FILENAMEの値を変更する事も出来ますが、AWKの動作は変わりません。


**** 使用例
--------
{
  print "只今、ファイル [" FILENAME "]の、" FNR "行目を読み込みました。";
}
--------

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


**** 機能
o 現在読み込み中ファイルの名前です。
o 標準入力から読み込んだ時、名前は「-」になります。例えば、
   + 入力ファイル名を指定せず、入力内容を手入力する場合
   + パイプを使って、他のコマンドの出力結果をawkプログラムに渡す場合
o getlineを使って別のファイル(やパイプ)を開いても、FILENAMEの値は変わりません。
o FILENAMEの値を変更しても、読み込み中ファイルは切り替わりません。


**** 確認した処理系
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
    ▼制作メモ
    > ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    OFS = printを使って書き出す時の列区切り文字
    ORS = printを使って書き出す時の改行文字
    +
    FNR = 現在の入力ファイルから読み込んだ行数
    ARGC = ARGVに入っている要素の個数
    ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用)
(2010年8月15日追加。手動更新した場合)

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指定時の動作が間違っていたので削除。空文字指定時の動作を追加。)