僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
まず第一作。
awk にしては冗長な気がするが。
#!/usr/bin/env awk BEGIN { for(x=1; x <= 16; x++) { if(x%15==0) { foo = "fizzbuzz" } else if(x%5==0) { foo = "buzz" } else if(x%3==0) { foo = "fizz" } else foo=x print foo } }
もう少し凝ってみた。適当に改行したから、少し多く見える。
もちろん結果は同じ。
#!/usr/bin/env awk BEGIN { for(x=1; x <= 16; x++) { x%15 ? \ (x%5 ? \ (x%3 ? y=x \ : y="fizz") \ : y="buzz") \ : y="fizzbuzz" print y } }
$ awk -f fb.awk 1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16
真偽がなんか逆になったみたい。
#!/usr/bin/env awk BEGIN { for(x=1; x <= 5; x++) { x%2 ? foo="奇" : foo="偶" print x,foo "数" } }
$ awk -f bin.awk 1 奇数 2 偶数 3 奇数 4 偶数 5 奇数
#!/usr/bin/env awk BEGIN{ 10 - 10 ? \ foo = "not zero" \ : foo = "zero" print foo } => zero
行末の¥もしくはバックスラッシュについて。
gawk では、
最初のバックスラッシュ
("?" の後ろ)を省略できたが、mawk と FreeBSD10.0-CURRENT のawkでは
省略できなかった。
ちなみに、
二つめのバックスラッシュ
(":" の前) は、いずれも省略できなかった。
$ uname -a FreeBSD $HOST 10.0-CURRENT FreeBSD 10.0-CURRENT #0: \ Tue Nov 13 16:44:34 JST 2012 \ root@$HOST:/usr/src/sys/amd64/compile/third amd64 $ awk --version awk version 20110810 (FreeBSD)
文字列の比較、そして配列作成。
#!/usr/bin/env awk BEGIN { foo="f" n = split("e g E G 1 100", bar, " ") for(i=1; i<=n;i++) { foo > bar[i] ? baz="larger" : baz="smaller" print foo " is " baz " than " bar[i] } } => f is larger than e f is smaller than g f is larger than E f is larger than G f is larger than 1 f is larger than 100
mawk, gawk とも同じ。
split() は、
AWKによる本にも
載ってはいた(P261,etc)が、ちゃんと
読まないと分からない。
sedとawkの本は、ちゃんと読まなくても
配列の生成方法として、セクションが
一つ割り当てられている(8.4.4)ことが
すぐ分かった。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。