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○○○○○現在読み込み中ファイルの名前
OFS○○○○○printを使って書き出す時の列区切り文字
ORS○○○○○printを使って書き出す時の改行文字
OFMT○○○○○printを使って数値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の時刻取得関数と関連機能