2010年7月17日土曜日

AWKの配列操作関数と関連機能 - AWK

AWKの関数、変数、制御文
**** 配列操作の手引き
配列を使う時の注意点まとめ
配列を代入、コピーする

**** 組み込み関数
length = 文字列や配列の長さを調べる
delete = 配列の要素を削除する
asort = 配列の要素を並び替える(Gawk専用)
asorti = 配列の添え字を取り出して並び替える(Gawk専用)
isarray = 変数が配列かどうか確認する(Gawk専用。バージョン4以降)

**** 関係する変数
SUBSEP = 配列の添え字の区切り文字
----
o AWKの配列添字は、数字の他に、文字列で指定する事も出来ます。
o 多次元配列もサポートしています。
    + カンマで区切って書きます。(例。a[1,2])
    + 内部では、普通の配列(= 1次元の連想配列)として管理しています。


配列管理機能サポート状況
名前Gawk
on
Windows
3.1.7
Gawk
for
Windows
3.1.6
mawk32
1.3.3
Mawk
for
Windows
1.3.3
awk
(May
1,
2007)
説明
配列管理  
length××文字列や配列の長さを調べる
delete配列の要素を削除する
asort×××配列の要素を並び替える
asorti×××配列の添え字を取り出して並び替える
変数。配列管理用  
SUBSEP配列の添え字の区切り文字
o mawkの length 関数は、文字列のみサポートしています。


==
関連ページ:
    ▼AWKの関数、変数、制御文▼ABC順
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKの正規表現
    +
    ▼AWKの数値計算関数と関連機能
    ▼AWKの文字列操作関数と関連機能

getline = ファイル(やパイプ)から1行読み込む - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 △(パイプ不可)Mawk ○awk
ファイル(やパイプ)から1行読み込みます。
o 読み込んだ行の最後に、改行コードは入りません。
o 読み込み方法を変更したい時は、変数FSRS辺りからどうぞ。

**** 書式
--------
getline [読み込み結果を入れる変数] [ < 入力ファイル名]
もしくは
入力コマンド文字列 | getline [読み込み結果を入れる変数]
Gawkの場合は
インターネット接続用文字列 |& getline [読み込み結果を入れる変数]
--------

(以下、書式の組み合わせ)
--------
getline
getline < 入力ファイル名
getline 読み込み結果を入れる変数
getline 読み込み結果を入れる変数 < 入力ファイル名
入力コマンド文字列 | getline
入力コマンド文字列 | getline 読み込み結果を入れる変数
インターネット接続用文字列 |& getline
インターネット接続用文字列 |& getline 読み込み結果を入れる変数
--------


o UNIX版Gawkは、次の書き方も可能です。
   + 入力コマンド文字列 |& getline [読み込み結果を入れる変数]

o 読み込み結果を入れる変数 -- 1行分が入ります。
   + 省略すると、変数$0に値を入れます。$0に値を入れる時は、$1以降と変数NFの値も更新します。
o 入力ファイル名 -- 指定すると、そのファイルから読み込みます。(例。getline < "in.txt" )
   + 標準入力を指定したい時は、特殊なファイル名を使います
o 入力コマンド文字列 -- 指定すると、そのコマンドを実行した結果を読み込みます。
   + "dir" など、文字列の形で指定します。
   + この形をサポートしていない処理系があります。(Mawk for Windows 1.3.3)
o インターネット接続用文字列 -- /inet から始まる文字列の形で指定します。
   + 詳しい書き方は、「/inet = AWKからインターネットにアクセスする方法(Gawk専用)
o 戻り値 -- 1 = 成功 / 0 = 取り出し終了 / -1 = エラー
   + 入力ファイルが見つからない時は、-1 を返します。
   + コマンドが間違っている時は、0(取り出し終了)を返します。


**** 使用例(Windowsの場合)
o Windows以外の方は、2箇所にある"dir"と 最後の"date /t"を、"ls"などに置き換えてみて下さい。
--------
BEGIN {
  # ファイルからの読み込み。$0などを更新
  while ((getline < "in.txt") > 0) {
    print;
  }
  close("in.txt"); # 同じファイルを再利用する時は、一旦閉じます。

  # ファイルから変数 var に読み込み。$0などはそのまま
  while ((getline var < "in.txt") > 0) {
    print var;
  }

  # コマンドからの読み込み。$0などを更新
  while (("dir" | getline) > 0) {
    print;
  }
  close("dir");

  # コマンドから変数 var に 1行だけ読み込み
  if (("date /t" | getline var) > 0) {
    print var;
  }
}
--------

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


**** 機能
o ファイル(やパイプ)から1行読み込みます。
   + 1行取り出す時に探す改行文字は、変数RSの値を使います。

o 読み込み結果を入れる変数を指定しない時、変数$0を始め、$1, $2, $3,,, NFに値を入れます。
   + $1などの列に分割する時の区切り文字は、変数FSの値を使います。
   + $0や $1などの値には、変数RSで指定した改行文字は入りません。

o 入力ファイル名や入力コマンド文字列を指定しない時、変数 FNRNR(= 読み込み行数)は1増えます。
o getline関数の引数は、括弧で括りません。getline(v) ではなく、getline v と書きます。

** 処理系に依存する動作
o Mawk for Windows 1.3.3
   + 「入力コマンド文字列 |」の形式は非対応です。


**** 確認した処理系
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
    ▼制作メモ
    > print = ファイルなどに書き出す
    printf = 文字列を組み立ててファイルなどに書き出す
    close = 開いたファイル(やパイプ)を閉じる
    +
    $0 = 最後に読み込んだデータ、1行分
    FS = 読み込んだ行を列に分割する時の区切り文字
    RS = 1行読み込む時の改行文字
    FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    BINMODE = バイナリモードで読み書きする(mawk,Gawk専用)
(2011年1月10日変更。引数のファイル名は文字列。なのでカッコ書き内を訂正)
(2010年10月7日追加。Gawkのインターネットアクセス)
(2010年9月14日追加。使用例で、ファイルから読み込みと変数利用)

AWKのパターンと制御文 - AWK

AWKの関数、変数、制御文
AWKの入出力とコマンド実行機能
**** 制御文の手引き
o 基本的な使い方
Hello, world
AWKプログラムを簡単に書く方法
AWKで最も短いプログラム
AWKプログラムの基本パターン
AWKの関数名と変数名を区別する方法
ローカル変数を使う

o 特別な使い方
AWKプログラム実行時に変数を設定する方法
AWKで入力ファイルの指定を不要にする方法
AWKの入力ファイルを、AWKプログラムの中で追加、削除(= キャンセル)する方法
入力ファイルを手入力する方法


**** パターン
BEGIN = 最初に実行する
END = 最後に実行する
パターンの書式と使い方


**** 制御文
o 条件分岐
if = 条件に一致したら実行する
else = ifで実行しない時に実行する
switch = 選択肢を選んで実行する(Gawk専用)
case = switch文の中で、選択肢を指定する(Gawk専用)
default = switch文の中で、全ての選択肢と一致しない時に実行する(Gawk専用)

o 繰り返し
while = 条件付きで繰り返す
do = 後でwhile判定する繰り返し
for = 繰り返し文その2
break = 繰り返し文を途中終了する
continue = 繰り返し文の先頭に戻る

o ユーザー定義関数
func => function
function = 関数を作る
return = 関数の呼び出し元に戻る

o 戻りと終了
exit = 終了する
next = 次行の処理に移る
    + next file => nextfile
nextfile = 次の入力ファイルの処理に移る (mawk不可)

o コメント
# = コメントを入力する


**** 関係する変数
ARGC = ARGVに入っている要素の個数
ARGV = AWK起動時に指定した入力ファイル名とコマンド名
ARGIND = ARGVにおける現在入力中ファイルの位置 (Gawk専用)
ENVIRON = 環境変数。読み取り専用
PROCINFO = AWKのプロセスに関する情報。プロセスIDなど(Gawk専用)


**** 関係する環境変数
AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)

制御文関連のサポート状況
名前Gawk
on
Windows
3.1.7
Gawk
for
Windows
3.1.6
mawk32
1.3.3
Mawk
for
Windows
1.3.3
awk
(May
1,
2007)
説明
特別なパターン  
BEGIN最初に実行する
END最後に実行する
条件分岐  
if条件に一致したら実行する
elseifで実行しない時に実行する
switch
(注記
あり)
×××選択肢を選んで実行する
case×××switch文の中で、選択肢を指定する
default
(注記
あり)
×××switch文の中で、全ての選択肢と一致しない時に実行する
繰り返し  
while条件付きで繰り返す
do後でwhile判定する繰り返し
for繰り返し文その2
break繰り返し文を途中終了する
continue繰り返し文の先頭に戻る
ユーザー定義関数  
function関数を作る
return関数の呼び出し元に戻る
func××functionの古い書き方
戻りと終了  
exit終了する
next
(注記あり)

(注記あり)

(注記あり)
次行の処理に移る
nextfile××
(注記あり)
次の入力ファイルの処理に移る
next file×××××nextfileの古い書き方
コメント  
#コメントを入力する
変数  
ARGC
(注記
あり)
ARGVに入っている要素の個数
ARGVAWK起動時に指定した入力ファイル名とコマンド名
ARGIND×××ARGVにおける現在入力中ファイルの位置
ENVIRON
(注記
あり)

(注記
あり)
環境変数。読み取り専用
PROCINFO
(部分対応)

(部分対応)
×××AWKのプロセスに関する情報。プロセスIDなど
環境変数  
AWKPATH××コマンドでのAWKファイル名指定時、ファイルの場所を省略する


==
関連ページ:
    ▼AWKの関数、変数、制御文▼ABC順
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKの配列操作関数と関連機能
    > 入出力とコマンド実行の注意点まとめ
    +
    ▼AWKの数値計算関数と関連機能
    ▼AWKの文字列操作関数と関連機能
    ▼AWKの入出力関数とコマンド実行機能