2010年6月29日火曜日

AWKの入出力関数とコマンド実行機能 - AWK

AWKの関数、変数、制御文
o 「入力 = 読み込み」「出力 = 書き出し」です。

**** 入出力の手引き
入出力とコマンド実行の注意点まとめ
ファイルからデータを読み込む
タブ区切りでファイルを読み込む
▼パターンの書き方は、制御文関連へ
AWKでバイナリ出力する(mawk, Gawk専用)
AWKでバイナリ入力する(Gawk専用)
改行コード。Windows / UNIX / Mac の違いについて
GawkでUTF-8のファイルを読み込む時の注意点
Gawkで、UTF-8のファイルからBOMを除去する
   + Gawkでインターネットアクセスする方法はこちら


**** 組み込み関数
o 入出力する
getline = ファイル(やパイプ)から1行読み込む
print = ファイルなどに書き出す
printf = 文字列を組み立ててファイルなどに書き出す
close = 開いたファイル(やパイプ)を閉じる
fflush = 出力バッファーを空にする

o コマンドを実行する
system = OSのコマンドを実行して、終了コードを返す
   + この他に、getline関数とパイプを併用する方法があります。


**** 関係する変数
o 入出力結果
$0 = 最後に読み込んだデータ、1行分
$1 = 最後に読み込んだデータの1列目
NF = 最後に読み込んだ行の列数
RT = 最後に読み込んだ行の改行文字(Gawk専用)
FNR = 現在読み込み中のファイルから読み込んだ行数
NR = これまでに読み込んだ行数
ERRNO = 入出力系の最新エラーメッセージ (Gawk専用)

o 入出力する為に使う値
FS = 読み込んだ行を列に分割する時の区切り文字。$1, $2に関係します。
FPAT = 読み込んだ行を列に分割する時の列取り出し規則(Gawk専用。バージョン4以降)
RS = 1行読み込む時の改行文字
FILENAME = 現在読み込み中ファイルの名前
ARGV = AWK起動時に指定した入力ファイル名とコマンド名
OFS = printを使って書き出す時の列区切り文字
ORS = printを使って書き出す時の改行文字
OFMT = printを使って数値1つだけを書き出す時の書式
CONVFMT = 数値を文字列に自動変換する時の書式
IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
BINMODE = バイナリモードで読み書きする(mawk,Gawk専用)


**** 関係する固定値
/inet = AWKからインターネットにアクセスする(Gawk専用)
/dev/stdout = 標準出力を示すファイル名
/dev/stderr = 標準エラー出力を示すファイル名
/dev/null = 常に空のファイル名(Gawk専用)
AWKプログラムで使用可能な特殊ファイル名。標準入力、標準出力、標準エラー出力など


**** 関係する演算子
o ファイル入出力
<   = ファイルからの入力
>   = ファイルに出力。上書きモード
>>   = ファイルに出力。後ろに追加
o コマンドとのパイプ
|   = パイプ。左の実行結果を右に渡す
|&   = 双方向通信(Gawk専用)
     + Windows 版 Gawk は、インターネット接続のみ
     + Unix 版 Gawk は、インターネット接続と、同一コマンドへの双方向通信


**** メモ
o mawk系と他のプログラムをパイプで繋ぐ時、「-W interactive」オプションを付けて実行した方が良い場合があります。
   + 何も指定しないと、mawkは、出来るだけ纏めて処理しようとするからです。

入出力とコマンド実行機能のサポート状況
名前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)
説明
入出力  
getline
(パイプ
不可)
ファイル(やパイプ)から1行読み込む
print
(パイプ
不可)
ファイルなどに書き出す
printf
(パイプ
不可)
文字列を組み立ててファイルなどに書き出す
close
(パイプ
不可)
開いたファイル(やパイプ)を閉じる
fflush
(パイプ
不可)
出力バッファーを空にする
コマンド実行  
system×OSのコマンドを実行して、終了コードを返す
変数。入力結果  
$0最後に読み込んだデータ、1行分
$1
(注記
あり)

(注記
あり)

(注記
あり)
最後に読み込んだデータの1列目
NF最後に読み込んだ行の列数
RT×××最後に読み込んだ行の改行文字
FNR現在読み込み中のファイルから読み込んだ行数
NRこれまでに読み込んだ行数
ERRNO×××入出力系の最新エラーメッセージ
変数。入出力する為に使う値  
FS読み込んだ行を列に分割する時の区切り文字。$1, $2に関係します
RS
(1文字
のみ)
1行読み込む時の改行文字
FILENAME現在読み込み中ファイルの名前
OFSprintを使って書き出す時の列区切り文字
ORSprintを使って書き出す時の改行文字
OFMTprintを使って数値1つだけを書き出す時の書式
CONVFMT数値を文字列に自動変換する時の書式
FIELDWIDTHS
(文字数)

(バイト数)
×××固定長ファイルを読み込む為の設定
BINMODE
(書き出しのみ)
×バイナリモードで読み書きする


特別なファイル名の一覧
名前Gawk on Windows 3.1.7Gawk for Windows 3.1.6mawk32 1.3.3Mawk for Windows 1.3.3awk (May 1, 2007)説明
入力  
/dev/stdin××標準入力 = コマンドプロンプト画面からの読み込み
/dev/fd/0×××標準入力。/dev/stdin と同じです
出力  
/dev/stdout標準出力 = コマンドプロンプト画面への書き出し
/dev/stderr標準エラー出力 = コマンドプロンプト画面への書き出しその2
/dev/null×××どこにも出力しない
/dev/fd/1×××標準出力。/dev/stdout と同じです
/dev/fd/2×××標準エラー出力。/dev/stderr と同じです
/dev/tty×××××現在表示中のコマンドプロンプト画面に出力。バックグラウンドで使用不可
入力。プロセス情報など取得(非推奨) 
/dev/pid×××自分のプロセスID。変数「PROCINFO」の使用を推奨
/dev/ppid×××××親プロセスのID。変数「PROCINFO」の使用を推奨
/dev/pgrpid×××××自分のプロセスのグループID。変数「PROCINFO」の使用を推奨
/dev/user×××××1行にユーザーIDなど4情報。$1 = uid / $2 = euid / $3 = gid / $4 = egid。変数「PROCINFO」の使用を推奨


==
関連ページ:
    ▼AWKの関数、変数、制御文▼ABC順
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKのインターネット接続機能(Gawk専用)
    ▼AWKの国際化対応機能 i18n(Gawk専用)
    ▼AWKのパターンと制御文
    +
    ▼AWKの数値計算関数と関連機能
    ▼AWKの文字列操作関数と関連機能
    ▼AWKの時刻取得関数と関連機能