Let's GAWK! とにかく使うJGAWK その15

 みなさん こんにちわ
 組み込み変数の話の続きです。

 世の中には実に多用なデータ形式があります。世のアプリケーションソフトには融通がきかないものも多いのですが、awkなら実にあっさり対応できます。

 普通、データベースにのせるようなデータはレコードとフィールドという単位から構成されます。レコードにはレコードの区切り(レコードセパレータ)、フィールドにはフィールドの区切り(フィールドセパレータ)がそれぞれあってデータを構造化しています。

 例えば次のようなデータでは1行が1レコード、さらに1レコードが氏名、性別、年齢の3つのフィールドから成ります。レコードセパレータは改行、フィールドセパレータはカンマです。

氏名,性別,年齢
モリタ ケンサク,M,57
ワダ タカオ,M,56
モリタ コウイチ,M,53
カノウ テンメイ,M,34
ハシダ スガコ,F,36
キシベ シロウ,M,65
ミヤザワ リエ,F,64

 awkのデフォルトではレコードセパレータは改行、フィールドセパレータは1文字以上の空白文字(半角空白かタブ)です。したがってデフォルトのままではこのデータを上手く処理できません。

 そこで、次の一文を加えます。

    BEGIN{FS=","}

 BEGINはいちばん最初に実行されるパターン、= は代入ですから、「いちばんはじめに組み込み変数FSに , を代入せよ」という意味です。組み込み変数FSはフィールドセパレータがセットされる変数ですから、このように明示的に指定することにより、自分の指定したフィールドセパレータが使えるようになります。

 手術台帳のデータはフィールドセパレータがタブ1つです。この場合

    BEGIN{FS="\t"}

と指定することで、タブ1個をフィールドセパレータにできます。デフォルトのままだと、連続した複数個のタブは1つのセパレータと見做されるので上手く扱えないのです。



 初出 NIFTY-Serve「みんみんネット」1996/09/21 (Sat) 14:17:54