awk

機能

テキストデータ処理用プログラム言語

起動方法

    awk オプション 'プログラム' 入力データ...
    awk オプション -f プログラムファイル 入力データ...

入力データは複数指定できる。

オプション

-Fs
-Fの後にある文字sを区切りの文字として使用する。
例えば -F: とすると、データを読んだ時に
123:456:789
というデータは$1が123、$2が456、$3が789になる。

説明

テキストデータに対して、各種の処理を実行するための、スクリプト言語である。 vpファイルなどの、数字が一定の規則にしたがって並んでいるようなデータを並べ代えたり、 計算したりするのに適している。

長所

短所

プログラムの形式

awkのプログラムは次のような
パターン {アクション}
が並んだ形をしている。
awkはデータを1行(1レコード)づつ読み込み、まずパターンに当てはまるかどうか調べて、 当てはまっている場合には、{}の中のアクションの部分を実行する。

パターン

BEGIN
入力データを読み込む前に実行するアクションを、指定する時に使用する。
他のパターンと組み合わせては使用できない。
END
全ての入力データを読んだ後に実行するアクションを、指定する時に使用する。
他のパターンと組み合わせては使用できない。
関係演算子(<,>,>=,<=,==,!=,~,!~)を使用した式
/正規表現/
正規表現で指定された文字が含まれているレコード(行)を表す。
パターン1 && パターン2
パターン1とパターン2が両方一致する場合を表す。
パターン1 || パターン2
パターン1とパターン2どちらかが一致する場合を表す。
! パターン
パターンに一致しない場合を表す。
(パターン)
パターンを他のパターンより優先して解釈する。
(数式で使われる括弧と同じ)
パターン1 , パターン2
パターン1からパターン2までの範囲を指定する。 他のパターンと組み合わせては使用できない。

アクション

アクションの部分には以下のような文が使用できる。

break
continue
delete 配列要素
do 文 while (式)
exit [式]
if (式) 文 [else 文]
入出力文
for (式; 式; 式) 文
for (変数 in 配列) 文
next
while (式) 文
{ 文の並び }

入出力

close
getline
次のレコード(行)を読む
getline < ファイル
ファイルから1レコード読み込む
getline 変数
次のレコード(行)を読んで変数に代入する
getline 変数 < ファイル
ファイルから1レコード読み込んで変数に代入する
print
現在のレコードを出力する(print $0 と同じ)
print 式の並び
式の並びを出力する
print 式の並び > ファイル
式の並びをファイルに出力する
printf ( 書式 , 式の並び )
式の並びを書式にしたがって出力する(C言語のprintf()とほぼ同じ)
printf ( 書式 , 式の並び ) > ファイル
式の並びを書式にしたがってファイルに出力する(C言語のfprintf()とほぼ同じ)
system ( コマンド )
UNIXのコマンドを実行する

組み込み変数

ARGC
コマンド行にある引数の数
ARGV
コマンド行にある引数の配列
FILENAME
現在の入力ファイル名
FNR
現在のファイルの入力レコード数
FS
コラムを区切る文字(デフォールトはスペース)
NF
現在の入力レコードのコラム数
NR
現在までの入力レコード数
RS
入力レコードの区切りの文字(デフォールトは改行)

組み込み文字列関数

gsub(r, s, t)
tの中で、rと一致するものをsで置き換える。
置き換えた個数を返す。 tが省略されると$0がtの代わりに使われる。
index(s, t)
sの中でtを見つけた位置を返す。
見つからない時は0を返す。
length(s)
sの長さを返す。
match(s, r)
sがrに適合する位置を返す。
split(s, a, fs)
fsを区切りの文字としてsを配列aの中にに分解する。
分解されたコラムの数を返す。
sprintf(書式, 式の並び)
式の並びを書式で整えたものを返す。
substr(s, i, n)
sの中からi文字目からi+n-1文字目までを返す。
nが省略された場合はi文字目から最後の文字までを返す。

組み込み算術関数

atan(x)
-πからπまでのy/xの逆正接(ラジアン)
cos(x)
余弦(ラジアン)
exp(x)
指数関数
int(x)
小数点以下を切捨てた整数値
log(x)
対数関数
rand(x)
乱数( 0 <= rand(x) < 1 )
sin(x)(ラジアン)
正弦
sqrt(x)
平方根
srand(x)
乱数の種をセットする。
xが省略されるとその日の時刻を使う。

制限

この制限は古いバージョンのものなので現在のものには当てはまらない。

参考文献


Home | Contents
Mail