「AWKプログラム」は、「パターン−アクション規則」と「関数定義」の並びである。
パターン{アクション}パターン−アクション規則や関数定義の前後に空行を挿入してもよい。関数定義はどこに記述してもよい。
入力レコードをひとつ読む度に、パターン−アクション規則のパターンが順に検査される。パターン−アクション規則は、パターンが真となるレコードに対して、対応するアクションが実行される。
パターンあるいは{アクション}のいずれかを省略することができる。パターンを省略するとすべてのレコードにアクションが実行され、{アクション}を省略するとパターンが真となるレコードを表示する。
「パターン」は次のいずれかである。
「アクション」は文の並びである。
文は次のいずれかである。
文は改行か';'で区切る。';'が単独で用いられると、空文を表す。文の前後には空行を挿入してもよい。
長い文は、行末に'\'を置いて次行に続けることができる。", { && || do else"のあと、および"if( )","for( )"のあとは、'\'を置かずに改行しても継続とみなされる。
制御文は次のいずれかである。
if-else文において、最初の文がelseと同じ行にある場合、この文は';'で終了するか"{ }"で囲まなければならない。
文の種類 | 記法 |
---|---|
逐次構造(文の並び) | {文1; 文2; ... 文n} |
選択構造(if文) | if(式) 文 |
選択構造(if-else文) | if(式) 文1 else 文2 |
ループ構造(for文) | for(式1; 式2; 式3) 文 |
ループ構造(while文) | while(式) 文 |
ループ構造(do-while文) | do 文 while(式) |
入出力文は次のとおりである。
getline | 入力レコードを"$0"にセット |
---|---|
getline 式 | 0または1 |
文の種類 | 書式 | 戻り値 |
---|---|---|
比較 | 式>=式 | 0または1 |
式!=式 | 0または1 | |
式==式 | 0または1 | |
配列要素 | 式 in 式 | 0または1 |
パターンの検査 | 式~/正規表現/ | 0または1 |
式!~/正規表現/ | 0または1 | |
和 | 式+式 | 演算結果 |
差 | 式-式 | 演算結果 |
積 | 式*式 | 演算結果 |
商 | 式/式 | 演算結果 |
剰余 | 式%式 | 演算結果 |
累乗 | 式^式 | 演算結果 |
+式 | ||
-式 | ||
(式) | ||
文字列連接 | 文字式 文字式 | 文字列 |
次の組み込み変数が用意されている。
組み込み変数 | 値 |
---|---|
ARGC | コマンド行の引数の数 |
ARGV | コマンド行の引数の配列 |
FILENAME | 現在の入力ファイル名 |
ENVIRON["..."] | 環境変数の値 |
FS | 入力のフィールドセパレータ(はじめはスペースまたはタブ) |
RS | 入力のレコードセパレータ(はじめは改行) |
NF | 現在レコードのフィールド数 |
NR | 現在の通算レコード |
FNR | 現在の入力ファイルの通算レコード |
OFS | 表示のフィールドセパレータ(はじめはスペース) |
ORS | 表示のレコードセパレータ(はじめは改行) |
OFMT | 数の表示のフォーマット(はじめは"%.6g") |
RSTART | matchでマッチした文字列の開始位置 |
RLENGTH | matchでマッチした文字列の長さ |
$0 | 現在の入力レコード |
$1,...,$NF | 第1フィールド,...,第NFフィールド |
組み込み文字列変数 | 値 |
---|---|
gsub(r,s,t) | 文字列tの中に現れる文字列rをすべて文字列sで置換する.置換した数を返す.tを省略すると$0が使われる. |
index(s,t) | 文字列sの中の文字列tの位置を返す.tが現れない場合は0. |
jindex(s,t) | 日本語文字列sの中の文字列tの位置を返す.tが現れない場合は0. |
length(s) | 文字列sの長さを返す. |
jlength(s) | 日本語文字列sの長さを返す. |
match(s,r) | 文字列sが文字列rにマッチする位置を返す.マッチしないときは0. |
split(s,a,fs) | fsをフィールドセパレータとして文字列sを配列aに分解し、フィールド数を返す. |
sprintf(書式,式) | 書式で整えた式の並びを返す. |
sub(r,s,t) | gsub()と同様.ただしはじめの1回だけ置換する. |
substr(s,i,n) | 文字列sのi番目から始まるn文字を返す. |
jsubstr(s,i,n) | 日本語文字列sのi番目から始まるn文字を返す. |
組み込み算術変数 | 値 |
---|---|
atan2(y,x) | atan(y/x)で-π〜πの値. |
sin(x) | sin関数 |
cos(x) | cos関数 |
exp(x) | exp関数 |
log(x) | 自然対数 |
sqrt(x) | 平方根 |
int(x) | 小数点以下を切り捨て |
rand() | 疑似乱数 0以上1未満 |
srand() | 乱数の初期化 |
printfとsprintfの中では次のような変換が利用できる。ここでは例で示す。
記法 | 値 |
---|---|
printf("|%c|",65) | |A| |
printf("|%d|",65) | |65| |
printf("|%5d|",65) | | 65| |
printf("|%05d|",65) | |00065| |
printf("|%f|",65) | |65.000000| |
printf("|%5.1f|",65) | | 65.0| |
printf("|%e|",65) | |6.500000e+01| |
printf("|%5.1e|",65) | |6.5e+01| |
printf("|%g|",65) | |65| |
printf("|%o|",65) | |101| |
printf("|%s|","hirosaki") | |hirosaki| |
printf("|%10s|","hirosaki") | | hirosaki| |
printf("|%-10s|","hirosaki") | |hirosaki | |
printf("|%.4s|","hirosaki") | |hiro| |
printf("|%10.4s|","hirosaki") | | hiro| |
printf("|%-10.4s|","hirosaki") | |hiro | |
printf("|%%|") | |%| |
例で正規表現の記法を示す。通常これらの組み合わせとなる。
記法 | 値 |
---|---|
A | Aそのもの(以下の特殊文字を除く普通の文字) |
\\ | \そのもの |
\" | "そのもの |
\t | タブ |
\n | 改行 |
\f | フォームフィード |
\b | バックスペース |
\033 | 8進数033 |
^a | 文字列の先頭が'a' |
a$ | 文字列の末尾が'a' |
. | 任意の1文字 |
[abc] | 'a''b''c'のどれか1文字 |
[^abc] | 'a''b''c'以外の1文字 |
[a-e] | 'a''b''c''d''e'のどれか1文字 |
[^a-e] | 'a''b''c''d''e'以外の1文字 |
a* | 0個以上の'a'の並び |
a+ | 1個以上の'a'の並び |
a? | 'a'が1個あるいは0個 |
abc|de | "abc"または"de" |