2011年3月3日木曜日

AWKの入力ファイルを、AWKプログラムの中で追加、削除(= キャンセル)する方法 - AWK

AWKプログラムを動かす
AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKの入力ファイルは、AWKプログラムの中で追加、変更、削除(= キャンセル)する事が出来ます。
変数 ARGC と ARGV を使います。


**** 手順
o 3つの手順について纏めました。
    + 1. 入力ファイルを後で追加する方法
    + 2. 読み込み予定の入力ファイルを削除(= キャンセル)する方法
        + (この手順を応用すると、入力予定のファイル名を変更する事も出来ます。)
    + 3. 後ろに続く入力ファイルをまとめて削除(= キャンセル)する方法

o 1. 入力ファイルを後で追加する方法
    + 次の書き方が便利です。「 ARGV[ARGC++] = "ファイル名" 」
    + ARGV[ARGC] に追加したいファイル名を入れた後に、ARGC に 1 を加えます。
--------
BEGIN {
    ARGV[ARGC++] = "ネギパーティ参加者.txt";
    ARGV[ARGC++] = "ネギパーティ参加者その2.txt";
}
{
    print "参加者 :" $1 "さん";
}
--------

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


o 2. 読み込み予定の入力ファイルを削除(= キャンセル)する方法
    + 次のように書きます。「 ARGV[消したいファイルの順番] = "" 」
--------
BEGIN {
    ARGV[1] = ""; # 最初に読み込むファイルをスキップします。
}
{
    print "参加者 :" $1 "さん";
}
--------

    + ARGV[1] に別のファイル名を指定すると、AWKは指定したファイルを読み込みます。

o 3. 後ろに続く入力ファイルをまとめて削除(= キャンセル)する方法
    + 次の書き方が便利です。「 ARGC = (合計ファイル数 + 1) 」
--------
BEGIN {
    ARGC = 2; # ファイルを最初の1つだけ読み込みます。
}
{
    print "参加者 :" $1 "さん";
}
--------

    + この他に、2番目の方法を使って、ARGV のファイル名を1つずつ消す方法もあります。


o 詳しい情報はこちらです。
    + ARGC = ARGVに入っている要素の個数
    + ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    + ARGIND = ARGVにおける現在入力中ファイルの位置 (Gawk専用)


**** メモ
o BEGIN だけでなく、ファイル読み込み中に変更する事が出来ます。
    + 読み込み中のファイルを削除した時の動作は、処理系によって異なります。
    + 詳しくは、「ARGC = ARGVに入っている要素の個数
o 現在のファイルの位置を調べたい時は、変数 ARGINV のメモ「ARGIND = ARGVにおける現在入力中ファイルの位置」(Gawk専用)をどうぞ。
    + この変数は Gawk限定ですが、メモ欄に、mawkなどでも動かす為の情報を載せました。


**** 確認した処理系
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プログラムを動かす
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > 入力ファイルを手入力する
    AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)
    BEGIN = 最初に実行する