Home > プログラミング > AWK - はじめ

AWK - はじめ

awk のプログラム(スクリプト)は

pattern { action }
pattern { action }
....

という構造にjなっている.pattern は /regex/ などのような正規表現や,BEGIN, END のような全ての最初と最後を意味するものがある.

入力はレコードセパレータ(RSという変数に入っている)によってレコードに分割され,全ての pattern に対してマッチが取られ,マッチしたときにはその pattern の action が実行される.デフォルトではフィールドセパレータは改行コードなので,一行が一レコードになってる.

例えば,外部から TARGET という変数に何か値を渡してあげて,"Start of TARGET" から "End of TARGET"までのレコードを出力するようなのは以下のとおり.

BEGIN {
	FLAG=0
	STARTPat="Start of "TARGET
	ENDPat="End of "TARGET
}
//{
	if($0 == ENDPat){
		FLAG = 0
	}
	if(FLAG) print
	if($0 == STARTPat){
		FLAG = 1
	}
}

BEGIN で最初に変数を初期化しておいて,その後ろの //{...} で全てのレコードに対してマッチして処理をしている.これをファイル(split.awk)に保存して

awk -f split.awk -v TARGET=1st < in.dat

とかやると, in.dat の中の "Start of 1st" から "End of 1st"までの行が取り出せる.

ちなみにレコードはフィールドセパレータ(FSという変数)で分割されて,各フィールドは $i (i=1,2,...,NF) で取り出せる.$0 はレコード全体.出力は print で,引数を省略すると print $0 の意味になる.

詳しくはマニュアル参照.

★下記に2つの英単語をスペースで区切って入力してください

Home > プログラミング > AWK - はじめ

Search
Feeds

Page Top