GNU Awk 3.0.6 + multi-byte extension 1.15
次の 様な データ の 場合は フィールドが カンマで 区切られている
Pmt> cat test Stephan David,UGHI Corp. , 325 5th Ave.,Brliinton,MA 0587964,558-8701 Richard Givson,Etr Inc.,985 Mountain St.,Basement,MA 0879579,416-9761 John Zaggett, Durban Company, Inc.,341 King Road Plymouth ,MA 96662,023-4795 Alice Dord,Nasge Cat, Inc. ,22 East Broadway Richmond, VA 09505,087-6479 Orville Hpomas,Nojia Corp ,11345 Oak Bridge Road, Tulsa, OK 34090,036-1257 Teddy Calcas,MAcyst Inc. ,402 Lans Road, Beaver Falls, PA 58702,078-9416 Eric Aduzeds,HGE Inc. ,20 Post Road, Sudbury, MA 79825,035-7169 Hubert Slkmu,Alhcoa Inc. ,328A Brook Road, Roanoke, VA 58796,081-4697 Amy Welfd,Jazz Sifood Inc.,334 Bayshore Pkwy, Mountain View, CA 21789,071-2845 Sal Karpenter,Rasar Inc. ,73 6th Street, Boston ,MA 87632,073-1876
awk スクリプト を 見ておこう
Pmt> cat awkscr # phonelist.awk -- print name and phone number.. # input file -- name,company,street,city,state and zip,phone BEGIN { FS = "," } # comma-delimited fields { print "" # output blank line print $1 "\t" $6 # name }
Pmt> awk -f awkscr test Stephan David 558-8701 Richard Givson 416-9761 John Zaggett 023-4795 Alice Dord 087-6479 Orville Hpomas 036-1257 Teddy Calcas 078-9416 Eric Aduzeds 035-7169 Hubert Slkmu 081-4697 Amy Welfd 071-2845 Sal Karpenter 073-1876
データーの区切りは カンマ 出力の ”$1”と”$6”の間は”tab” と した 以外は 取り立てて どうこう ということでは 有りませんが もう少し データー の 範囲を 狭めたい場合は どうするか、 ここで 5番目の フィールド に ”MA” と有るものを 対象に したい場合は
抜き出す範囲を 絞るために awkscr を 変更しよう この様にした。
Pmt> cat awkscr # phonelist.awk -- print name and phone number.. # input file -- name,company,street,city,state and zip,phone # Select Include MA BEGIN { FS = "," } /MA/ { print "\n" $1 "\t" $6 }
どうなるでしょうか?
Pmt> awk -f awkscr test Stephan David 558-8701 Richard Givson 416-9761 John Zaggett 023-4795 Teddy Calcas 078-9416 Eric Aduzeds 035-7169 Sal Karpenter 073-1876
これは これで 良いのですが 例えば カンマで区切られた 5番目の フィー ルド で ”MA”が 有るもの という のが 望んでいたとすると 1個 多く 抜き 出された 事に なります
Pmt> cat test Stephan David,UGHI Corp. , 325 5th Ave.,Brliinton,MA 0587964,558-8701 Richard Givson,Etr Inc.,985 Mountain St.,Basement,MA 0879579,416-9761 John Zaggett, Durban Company, Inc.,341 King Road Plymouth ,MA 96662,023-4795 Alice Dord,Nasge Cat, Inc. ,22 East Broadway Richmond, VA 09505,087-6479 Orville Hpomas,Nojia Corp ,11345 Oak Bridge Road, Tulsa, OK 34090,036-1257 Teddy Calcas,MAcyst Inc. ,402 Lans Road, Beaver Falls, PA 58702,078-9416 Eric Aduzeds,HGE Inc. ,20 Post Road, Sudbury, MA 79825,035-7169 Hubert Slkmu,Alhcoa Inc. ,328A Brook Road, Roanoke, VA 58796,081-4697 Amy Welfd,Jazz Sifood Inc.,334 Bayshore Pkwy, Mountain View, CA 21789,071-2845 Sal Karpenter,Rasar Inc. ,73 6th Street, Boston ,MA 87632,073-1876
もう一度 ”awkscr” を 見てみると
Pmt> sed -e '/^#/d' awkscr BEGIN { FS = "," } /MA/ { print "\n" $1 "\t" $6 }
デリミタ は カンマ です というのが 最初の 行 ”BEGIN”で 処理を し
ています 。次の 行は なにか ”MA”という 文字列を 含む 行 にたいして 最初
1行 送りなさい ”\
n”、そうして その後に 該当する 行に対して 1番最初の
フィールドを 出力 、次に タブを 出力 ”\
t”、そうしてその後に 6番目のフィー
ルドを 出力 しなさい、ということです。 ここで 上記の 場合は 行に 対して ”
MA”を含む 場合に 対する 処理を 行っているが フィールドの 5番目に 対して
という条件は 有りません。その場合は 何か条件を 追記 せねば いけん という
ことです。
ということで もう少し awkscr を 変更 すると
Pmt> cat awkscr # phonelist.awk -- print name and phone number.. # input file -- name,company,street,city,state and zip,phone # Select Include MA BEGIN { FS = "," } $5 ~ /MA/ { print "\n" $1 "\t" $6 }
ほんで もって
Pmt> cat awkscr # phonelist.awk -- print name and phone number.. # input file -- name,company,street,city,state and zip,phone # Select Include MA BEGIN { FS = "," } $5 ~ /MA/ { print "\n" $1 "\t" $6 }
試すと
Pmt> awk -f awkscr test Stephan David 558-8701 Richard Givson 416-9761 John Zaggett 023-4795 Eric Aduzeds 035-7169 Sal Karpenter 073-1876
というふうに するようです。
最後に !~ バンチルド を 使ってみよう 結果の 予測は つくだろうか?
Pmt> cat awkscr # phonelist.awk -- print name and phone number.. # input file -- name,company,street,city,state and zip,phone # Select Include MA BEGIN { FS = "," } $5 !~ /MA/ { print "\n" $1 "\t" $6 }
結果は
Pmt> awk -f awkscr test Alice Dord 087-6479 Orville Hpomas 036-1257 Teddy Calcas 078-9416 Hubert Slkmu 081-4697 Amy Welfd 071-2845
予測した通りだろうか ルールを逆に できるようである。
にゃんたろう 拝!
GNU Awk 3.0.6 + multi-byte extension 1.15
2006年12月28日 (木) 22:08:18 JST 作成