AWK文法
目 次
<文法編>
1.AWKとは?
2.プログラム構造
3.変数
4.制御構造
5.ループ
6.配列
7.正規表現
1 AWKとは?
AWKというのは、スクリプト言語のひとつであり、テキストデータを処理するのに適している言語です。
ソースはC言語によく似ていますが、コンパイルが不要であり、また変数の宣言なども必要がないことから、プログラムを組む側にとっては、楽な言語かもしれません。
ですから、コンパイルをして変数の宣言がないから怒られたりということはまずありません。
自動的に、扱っているデータが数値なのか文字なのかを認識してくれます。
しかし慣れなれないうちは、どれが数値でどれが文字なのかごっちゃになってしまい、結果が間違ってしまうといったことも起きる可能性もあるので注意が必要です。
2 プログラム構造
プログラム構造は以下のような形になります。
BEGIN{action1}
{action2}
…
{action3}
END{action4}
パターンという条件によって{}のなかのアクションを実行するという形になります。
すなわち,入力した行が特定の条件を満たすときにのみ,対応するアクションを実行する。パターンには3つあり、
BEGINパターン … 入力ファイルを読む前に1度だけ実行される。
空のパターン … 条件なしで実行される。(一番よくつかうかも)。
ENDパターン … 入力ファイルを全部読んだ後に一度だけ実行される。
3 変数
基本的には=で変数に代入していくだけでOKです。
文字は””で囲んでやります。あとは勝手に認識してくれるので非常に楽です。
また文字を連結してやるときには、空白で囲むだけでOKです。(あとで演習で行います)
あとAWKには以下に示しているような、組みこみ変数という便利な機能があります。
次のような変数をAWKが勝手に作ってくれます。別に使わなくてもいいのですが、
これらを有効利用するとソースが非常に簡単になります。
FS … データのフィールドの区切り文字。
OFMT … print文の書式。
FILENAME … 入力データのファイル名。
FNR … 現在入力しているファイルのレコード番号。
NR … 現在までに入力したレコード数。
NF … 読み込んだ入力行に含まれるフィールドの数。
4 制御構造
Cといっしょです。説明省略
if ( expression1) action1
else if ( expression2) action2
else if ( expression3) action3
else action4
5 ループ
Cといっしょです。forやwhileをやはりよく使うと思います。説明省略
while(condition)
action
for(setcounter;testcounter;incrementcounter)
action
これらのループから抜けるときに次のコマンドを使います。Cと同じですね。
break 最も内側のループから抜ける
continue 最も内側の次の繰り返しを始める
6 配列
Cと少し違います。[ ]の中にカンマを書くことによって次元を区別します。
ただ配列のサイズも、型も全く宣言する必要はないので、以下のようにただ代入していけば良いです。
1次元
array[subscript]=value
2次元
array[subscript1,sbscript2]=value
あと連想配列の機能があります。これがCとは一番違うところです。
配列は普通、添字は1(あるいは0)から始まる連続する数値ですが、任意の文字列を添字として使う配列を連想配列と言います。慣れてくると便利さが実感できます。
例えば、
array["string"] = value
のように使います。これに関しては後の演習でも出てきます。
7 正規表現
簡単に言えば、ある規則に従う文字列を識別するための規則のことです。
UNIXのコマンドでgrepをつかったり、秀丸などのエディタで正規表現の機能を使っている人にはなじみのある部分だと思います。
ある文字列を、特定の文字で指定する方法であり、マッチングの概念です。
プログラミング演習へ
もとのホームページに戻る