awk
機能
テキストデータ処理用プログラム言語
起動方法
awk オプション 'プログラム' 入力データ...
awk オプション -f プログラムファイル 入力データ...
入力データは複数指定できる。
オプション
- -Fs
- -Fの後にある文字sを区切りの文字として使用する。
例えば -F: とすると、データを読んだ時に
123:456:789
というデータは$1が123、$2が456、$3が789になる。
説明
テキストデータに対して、各種の処理を実行するための、スクリプト言語である。
vpファイルなどの、数字が一定の規則にしたがって並んでいるようなデータを並べ代えたり、
計算したりするのに適している。
長所
- 表計算などが簡単に実行できる。
- C言語のようにコンパイルの必要がない。
- フリーのソフトである。
- パソコン(DOS、WINDOWS、Mac)でも使用できる。
短所
- 計算速度が遅い
- バイナリーデータ(画像データなど)は扱えない
- GLなどの描画プログラムは作れない
プログラムの形式
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が省略されるとその日の時刻を使う。
制限
この制限は古いバージョンのものなので現在のものには当てはまらない。
- コラムは100個まで。
- 1レコード(1行)は3000文字まで。
- 1コラムは1024文字まで。
- 開けるファイルは10個まで。
参考文献
Home | Contents
Mail