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

 みなさん こんにちわ

 組み込み関数の第2回です。

 前回よく使う組み込み関数の例として「置換」をあげました。置換というのはある文字列をある文字列で置き換えるということです。例えばこういう用途で使います。

 あるデータをあるソフトで利用する場合、そのままではなかなか読み込みが上手くいかないというケースがままあります。この時一部の文字を置き換えてやれば解決ということは案外多いものです。


 例えばこのデータは残念ながら一般のデータベースソフトではなかなか上手く扱えません。項目を囲んでいる「"」や「 」が仇になり、数字としての大小比較ができないのです。

"960105","  19","   960001","森田健作          ","M"," 57","   6","   
0","   0","960105","   7.8","  1.69","    25","    21","   333","   13
8","    25","   5.2","   0.6","  19.4","   4.1","   223","    80","   
140","   0.1","  5800","   514","  15.9","  48.4","  29.1","    83"
"960105","  20","   960002","和田孝雄          ","M"," 56","   6","   
0","   0","960105","   7.1","  1.96","    23","    32","   225","   11
8","    23","   2.6","   0.6","  21.0","   5.8","   163","    50","   
204","   0.1","  6700","   543","  17.0","  49.3","  21.6","    78"

(注)70桁で改行してありますが、もともと1患者1レコードです。


 それで余分な「"」や「 」をカットして扱いやすくしたいわけで、置換の出番です。文字列のはじめの部分だけを置換したい場合(1回だけ置換したい場合)にはsub、マッチしたすべてを置換したい場合にはgsubを使います。今回の目的ではgsubですね。

  {gsub(/"/,"")}
  {gsub(/[ ][ ]+/,"")}
  {print}

 sub、gsubでは「//」で囲まれた文字列を「,」以下の文字列で置換します。文字列は「" "」で囲んで指定します。この例のように単に"を2つ並べれば「何も指定しない」つまりそのマッチした文字列を消去することになります。

 さらにもう一つ「,」をおいて後に文字列を書くとその文字列が処理対象になりますが、この例のように何も書かなければ $0(レコード丸ごと)が指定されたものと見做されます。

 よって、はじめの{gsub(/"/,"")}は、「"を消去せよ」の意味です。

 長くなりそうなので2発言に分けます。



 初出 NIFTY-Serve「みんみんネット」1996/09/18 (Wed) 12:47:28