2009年3月28日土曜日

awk No.004(条件指定)

awk の条件指定はいろいろあります。

まず、空行を除く場合は、以下のように NF > 0 を指定します。余計なデータを除いて処理する場合の基本です。ここで使っている NF は読み込んだレコードのフィールド数(データ数)を表わしています。NF が 0 よりも大きい、すなわち 1 個以上の場合は処理をするという指定になります。(空行はデータがないので処理しないということになります。)

awk 'NF > 0 {print $1}' a.dat
空行を除く場合は、以下のようにもできます。どちらかといえばこちらの方が本当の意味で空行を判定しています。^$ は正規表現で先頭と行末で、先頭と行末のみということは空行で、それを ! で否定していますので、空行ではない行という条件になります。データが無いという条件より厳密です。
awk '!/^$/ {print $1}' a.dat
何番目のレコードを処理するというように、レコードの順番を指定して処理する場合は、以下のように NR を使います。例えばデータファイルに行タイトルがある場合は、1行目を読み飛ばす等の処理ができます。
awk 'NR > 1 {print $1}' a.dat
基本的な使い方をもう一つ。読み込んだデータの内容によって処理をするかどうかを判定します。1番目のフィールドのデータが 100 より大きい場合に処理をするといった使い方は以下の通りです。
awk '$1 > 100 {print $1}' a.dat

0 件のコメント: