トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

UnixCmd/awk

INDEX

AWK - Aho Kerninghan Weinberger -

awkは、UNIX標準のテキスト処理コマンドで利用可能なテキスト処理に向いているインタプリタ型言語の一つです。grepやsedより、強力なパターンマッチ等が行え、計算機能等も持っています。

gawkは、awk の GNU による実装である。

コマンドライン書式

gawk [POSIX or GNU style options] -f progfile [--] file ...
gawk [POSIX or GNU style options] [--] 'program' file ...

 オプション

-f program-file / --file program-file
awkへの第 1 引数を用いるかわりに、AWKプログラムをファイル program-file から読み込みます。 -f (または --file )オプションは複数回使用することができます。
-F fs / --field-separator fs
入力フィールドセパレータ (変数 FS の値)を fs とします。
-v var=val / --assign var=val
プログラムを実行する前に、変数 var に値 val を設定します。 このようにして設定した変数は、AWKプログラムのBEGINブロック内でも参照できます。
-mf NNN , -mr NNN /
さまざまなメモリの制限値を NNN に設定します。 フラグf は最大フィールド数、フラグr は最大レコードサイズを設定します。 この2つのフラグと -m オプションは、Bell Labs バージョンの UNIX awk に由来しています。 しかし、gawk にはこのような制限はありませんので、gawk では本オプションは無視されます。
-W traditional , -W compat / --traditional , --compat
互換モードで動作します。互換モードでは、gawk は UNIX awk と等価な動作を行い、GNU 独自拡張は解釈できません。 このオプションの他の形式よりも、--traditional を使用することが好まれます。詳しくは後述の GNU 拡張を参照してください。
-W copyleft , -W copyright / --copyleft , --copyright
GNU の著作権表示の短いバージョンを標準出力へ書き出し、成功状態で終了します。
-W help , -W usage / --help , --usage
短めのオプション一覧を標準出力へ書き出します。
-W version / --version
実行されたgawkプログラムのバージョン情報を標準出力へ書き出します。
-W source program-text / --source program-text
program-text をAWKプログラムとして用います。
-W re-interval / --re-interval
正規表現のマッチングで インターバル表現 (interval expressions) を有効にします。
-W lint / --lint
他のAWKでの処理が疑わしい、あるいは他のAWKとの互換性がない構造がある場合に警告を行います。
-W lint-old / --lint-old
オリジナルの Unix awk へ移植できない構造に関して警告を行います。
-W posix / --posix
互換 モードをオンにし、更に以下の制約が課せられます。
  • \x エスケープシーケンスを解釈しません。
  • FS が単一の空白に設定された場合、空白とタブのみがフィールドを区切り、改行はフィールドを区切りません。
  • キーワード function に対応する別名 func を解釈しません。
  • 演算子 ^ や ^= のかわりに ** や **= を用いることができません。
  • fflush() 関数は利用できません。
-W ctype=ASCII --ctype=ASCII
-W ctype=EUC --ctype=EUC
-W ctype=SJIS --ctype=SJIS

パターン

 BEGIN と END

awkには特殊なパターンであるBEGINとENDが用意されています。BEGINは、処理が行われる一番最初に実行されるもので、ENDは、一番最後に実行されるものです。

組み込み変数

ARGC
コマンドライン引数の個数 (オプション、プログラム指定は含みません)。
ARGIND
現在処理中のファイル名が格納されている配列 ARGV のインデックス。
ARGV
コマンドライン引数の配列。配列は、0から ARGC - 1 までのインデックスを持ちます。ARGV の内容を変更することで、入力に用いるファイル名を変更することができます。
CONVFMT
数値の変換フォーマット。デフォルト値は "%.6g" です。
ENVIRON
現在の環境変数の値からなる配列。配列は、環境変数名によりインデックスされ、各要素の値はその環境変数の値です。(例えば ENVIRON["HOME"] は /home/arnold となるでしょう)。
ERRNO
getlineのリダイレクト、getlineによる読み込み、close()関数の実行時のいずれかにシステムエラーが発生した場合、変数ERRNOにはエラーの内容を示した文字列が設定されます。
FIELDWIDTHS
空白で区切られたフィールド長のリスト。
FILENAME
現在の入力ファイル名。ただし、BEGINブロック内ではFILENAMEは未定義です。コマンドラインで入力ファイルが指定されていなければ、 FILENAME の値は``-''です。
FNR
現在の入力ファイルにおける入力レコード番号。
FS
入力フィールドセパレータ。デフォルトでは単一の空白です。
IGNORECASE
すべての正規表現と文字列操作において大文字小文字の区別を制御します。
NF
現在の入力レコードのフィールド数。
NR
現在までに読み込んだ入力レコード数の合計。
OFMT
数字の出力フォーマット。デフォルト値は"%.6g"です。
OFS
出力フィールドセパレータ。デフォルトは空白です。
ORS
出力レコードセパレータ。デフォルトは改行です。
RS
入力レコードセパレータ。デフォルトは改行です。
RT
レコードターミネータ。
RSTART
match() によりマッチした最初の文字の位置。0はマッチしなかったことを示します。
RLENGTH
match() によりマッチした文字列の長さ。-1はマッチしなかったことを示します。
SUBSEP
多次元配列を実現する際に用いられる、配列のインデックスを結合する文字。デフォルト値は "\034" です。

組み込み関数

 入出力

close(file)
ファイル (またはパイプ、下記参照) をクローズします。
getline
次のレコードを $0 に読み込みます。 NF, NR, FNR が設定されます。
getline < file
ファイル file から次のレコードを $0 に読み込みます。 NF が設定されます。
getline var
次のレコードを変数 var に読み込みます。 NR, FNR が設定されます。
getline var < file
ファイル file から次のレコードを変数 var に読み込みます。
next
現在のレコードに対する処理を終了し、次のレコードを読み込み、AWK プログラムの最初のパターンから処理を開始します。
nextfile
現在の入力ファイルに対する処理を終了し、次の入力ファイルからレコードを読み込みます。 FILENAME と ARGIND が更新され、 FNR が 1 にリセットされ、AWK プログラムの最初のパターンから処理が開始されます。入力データの終端に達したときは、もし存在すれば、 END ブロックが実行されます。
print
現在のレコードを出力します。出力レコードは ORS 変数の値にて終端されます。
print expr-list
式 expr-list を出力します。各式は OFS の値で区切られます。出力されるレコードの最後には ORS の値が付加されます。
print expr-list > file
式 expr-list をファイル file に出力します。各式は OFS の値で区切られます。出力されるレコードの最後には ORS の値が付加されます。
printf fmt, expr-list
書式付き出力です。
printf fmt, expr-list > file
ファイル file への書式付き出力です。
system(cmd-line)
コマンド cmd-line を実行し、終了ステータスを返します。
fflush([file])
オープンされている出力ファイルまたはパイプ file に関連づけられているバッファをフラッシュします。 file を指定しないと標準出力が、file が空文字列の場合、オープンされているすべてのファイルとパイプのバッファをフラッシュします。

 数値関数

atan2(y, x)
y/x の逆正接をラジアンで与えます。
cos(expr)
expr の余弦をラジアンで与えます。
exp(expr)
指数関数。
int(expr)
整数への切捨て。
log(expr)
自然対数。
rand()
0 から 1 の間の乱数を与えます。
sin(expr)
expr の正弦をラジアンで与えます。
sqrt(expr)
平方根。
srand([expr])
expr の値を乱数生成関数の種として用います。式が指定されなかった場合は、時刻が用いられます。直前の種の値を返します。

 文字列関数

gensub(r, s, h [, t])
対象文字列 t から正規表現 r のマッチを探します。 h が g または G で開始する文字列の場合、マッチする r をすべて s に置き換えます。そうでない場合、 h は何番目の r のマッチを置き換えるのかを示します。t を指定しなかった場合は $0 が用いられます。
gsub(r, s [, t])
文字列 t 中で正規表現 r にマッチした部分をすべて s に置換します。置換の個数を返します。 t を指定しなかった場合は $0 が用いられます。
index(s, t)
文字列 s 中に含まれる文字列 t の位置を返します。 t が含まれていない場合は 0 を返します。
length([s])
文字列 s の長さを返します。 s を指定しなかった場合には $0 の長さを返します。
match(s, r)
文字列 s 中で正規表現 r にマッチする位置を返します。マッチしない場合は 0 を返します。 RSTART と RLENGTH の値が設定されます。
split(s, a [, r])
文字列 s を正規表現 r を用いて分割し、配列 a に格納します。フィールド数を返します。 r が省略された場合は FS が用いられます。配列 a の内容は、分割前にクリアされます。
sprintf(fmt, expr-list)
書式 fmt に従って exp-list を整形表示し、結果の文字列を返します。
sub(r, s [, t])
gsub() と似ていますが、最初にマッチした文字列のみが置換されます。
substr(s, i [, n])
文字列 s の i 文字目から始まる最大 n 文字の部分文字列を返します。 n が省略された場合、 i 文字目以降の部分文字列が返されます。
tolower(str)
文字列 str をコピーし、大文字をすべて小文字に変換したものを返します。アルファベットでない文字は変化しません。
toupper(str)
文字列 str をコピーし、小文字をすべて大文字に変換したものを返します。アルファベットでない文字は変化しません。

 時間関数

systime()
基準時点からの経過秒数を返します (POSIX システムでは、基準時点は UTC で 1970 年 1 月 1 日 0:00 です)。
strftime([format [, timestamp]])
書式 format に従って timestamp をフォーマットします。timestamp は systime() が返す値と同じ形式でなければなりません。timestamp が省略された場合、現在の日付が使用されます。

Win32移植版

 gawk win32 (Vector Soft Library)

http://www.vector.co.jp/soft/win95/util/se015007.html

GNU awk (gawk) Ver. 2.15.4 にマルチバイト対応(Shift-JIS)を行ったもの。UNICODEには未対応。

 GnuWin32

http://gnuwin32.sourceforge.net/

最終更新時間:2008年12月08日 19時33分00秒 指摘や意見などあればSandBoxのBBSへ。