
Aho、Weinberger、Kernighan著の「プログラミング言語AWK」復刊 103
ストーリー by hylom
A.W.K! A.W.K! 部門より
A.W.K! A.W.K! 部門より
あるAnonymous Coward 曰く、
AWKの開発者であり、その名の由来にもなったAlfred AhoおよびPeter Weinberger、Brian KernighanによるAWK本「プログラミング言語AWK」が復刊するそうです(復刊ドットコム)。版元はUSP出版、価格は3,990円。
テキスト処理と演算に絶大な効果を発揮する「AWK」は、開発当時の1970年代から、開発者たちによって「30年後、ハードウェアの性能が向上するころに、その真価がわかるだろう」と予言されていたといいます。事実、インターネットの普及により、テキストで書かれたHTMLが大量に生成され、多くの人がテキストデータに触れるようになった昨今において、軽量で簡単にテキストを処理することができるAWKの良さが見直されつつあります。
とのこと。PHPやPerl、Ruby、Pythonなどの普及により、前時代のスクリプト言語として忘れ去られつつある気もするAWKですが、これを機に再度学び直してみてはいかがでしょうか?
詳しくはないんです・・・ (スコア:2)
awkは知らないので。
オライリーのsed/awk本じゃだめなの?Ahoさんが書いた本だから価値があるのかな?
-- gonta --
"May Macintosh be with you"
Re:詳しくはないんです・・・ (スコア:1)
別に悪くはありませんが、大抵はそのオライリーの様にsedとセットで扱われるので、awkを単独で扱う書籍は貴重なんですよ。他は多分256本 [amazon.co.jp]と、gawkのマニュアル [amazon.co.jp]くらいじゃないかな。あと、awkの原作者が書いた本、というのも大きいでしょう。Cで言うところのK&Rと一緒です。
とかく一緒に扱われることが多いsedとawkですが、
などの点を除けば、構文を含め共通点はほとんど無いというのが個人的な印象なので、単独で扱ってくれた方が良い気がします。
Re:詳しくはないんです・・・ (スコア:1, おもしろおかしい)
Re:詳しくはないんです・・・ (スコア:1, 興味深い)
私はたまたまブックオフで105円で買いましたが、
買って言うのもなんだが、105円で売っててはいけません。嘆かわしい。
awk解説書のふりをしたコンパイラ入門とでもいうべきでしょうか。
プログラミング言語の本って中身は計算機科学概論なのが多いけど(とくにLisp系は)、
この本は実用的だし、コードの磨かれ方、筆の運び方が絶品です。
最近コンパイラ本の新刊ラッシュだけど、まずはこれを読むべきですよ。
Re:詳しくはないんです・・・ (スコア:1)
awk + inetd で httpd って、どこかの雑誌で読んだんだけど (スコア:1, 興味深い)
3の倍数行だけ Aho と表示する (スコア:1, おもしろおかしい)
cat /var/log/messages | awk '{if(NR % 3) print ;else print "Aho"}'
Re:3の倍数行だけ Aho と表示する (スコア:1, すばらしい洞察)
awk 'NR%3?1:$0="Aho"' /var/log/messages
中央寄せ強調表記のパイオニア (スコア:1, 参考になる)
未だに手の届くトコに256本を常備している私ですが……
なんと未だに流通してるっぽい [google.co.jp]。
これもオススメです。
Re:中央寄せ強調表記のパイオニア (スコア:1)
たいしたスキルも持ち合わせていなかった私ですが
98のBASICで作られた在庫管理ソフトのデータをLSI C-86試食版でテキストで切り出し
AWKに処理させてEXCELで表示させてました。
スマートにやるならEXCELのマクロ使えば出来たのかもしれませんが動けばいいじゃんて事で
…よく見たら本棚の中に、まだちゃんとありました(^_^;)久しぶりに見てみるかな。
Re:中央寄せ強調表記のパイオニア (スコア:1)
640KBの壁に悩まされることなく jgawk を使えるようにしたくて Linux に触り始めたので、awk には非常に思い入れがあります。
一行野郎 (スコア:1)
この本でone linearを一行野郎と訳したセンスに感動してawkで一行野郎を量産した日々…
Re:一行野郎 (スコア:1)
typo。one linerね (^^;;
Re:ソースは俺 (スコア:2, 参考になる)
変にプログラミング言語だと思って入門しようとすると、癖がありすぎる割りに使いにくいから挫折する。
3の倍数であほを表示するコメントにもあるように、何かの拍子により効率的な方法を覚えたらそれを使えばよい。
自分もはじめは、単語ごとにちょっとした操作ができる grepのつもりで使っていた。
Re:ソースは俺 (スコア:2, おもしろおかしい)
Aho の発音は "エイホ" であるが、“アホ”と発音する人がいる。
しかし、制作者の一人であるブライアン・カーニハンは『プログラミング言語AWK』の日本語版の序文で、決してそのような発音をしてはならないと主張している。
Re:ソースは俺 (スコア:1)
...一瞬マジに納得しかけたやんかぁ~!
プログラミング言語C(第2版)の訳者まえがきでカーニハン博士が日本語を勉強しているというエピソードが書かれていたのを思い出して、そうかぁ、カーニハン博士はそんなことまで気に掛けていたのかぁ、なんて思ってしまいました(違)。
たぶん元ネタ [wikipedia.org]だよね。
無粋なまねしちゃってゴメンナサイ → 元コメ#1698752 [srad.jp]のACさん
# 関係ないけど彼ってフィンランド系なのかなぁ?
# フィンランドって、元首相のエスコ・アホ (Esko Tapani Aho) [wikipedia.org]氏とか普通に「アホ(又はアーホ)」姓の人居るし、
# スキージャンプのヤンネ・アホネン (Janne Petteri Ahonen) [wikipedia.org]選手とかも「アホ」って読むし。
# もしそうだとすると、フィンランド語読みになると「アホ」で、英語読みだと「エイホ」になるとか?
ポイントは (スコア:1)
数値に変換するときは foo = $2 + 0 等で変換できる
関数内のローカル変数は多目に引数を宣言した分が使用できる、foo(1, 2) で呼び出す場合、function foo(a, b, c) の c が使える(リカーシブ可)
ぐらいじゃない?
あと、文字列の連結が空白か($2 $3 等)
Re:ポイントは (スコア:1)
連想配列を引数に渡したときの挙動も注意が必要かも。関数内の変更が呼び元に波及する。
Cで配列(の先頭ポインタ)を引数にしたときを思えば、逆に自然なのか?
Re:ポイントは (スコア:1)
宣言(や定義)していない変数が参照できるのが
最大の欠点だと思ってました。
#今は何かスイッチがあるのかな。
ツールとしては
bash に入れるコマンドを作るのにまだよく使ってます。
それをつかわないなんてもったいない (スコア:1)
奥義を駆使しまくって使いこなさなくても、
少々ヘボでもタコでもマヌケでも、
とりあえず済ませたい用事を、ててっと片付けられるのが、
awkやらsedやらの偉さだと思うんですよ。
// スニペットやサンプルの類も、ネットにしこたま転がってるしね
Re:それをつかわないなんてもったいない (スコア:2, 参考になる)
awk バンバン使ってますよー
99% のコードは
% cat hogehoge | awk '{print $2}'
ですけど(それ以外知らないとも言う).
sort, uniq 辺りとの相性抜群です.
Re:それをつかわないなんてもったいない (スコア:2)
Re:それをつかわないなんてもったいない (スコア:1)
あ、こんなところにをれガイル。
Re:それをつかわないなんてもったいない (スコア:1)
なんでオレが何人もいるんだ?
アクセスログの簡単な解析とかに重宝してます。
「なんか重いんだけど」
% cat hogehoge | awk '{print $2}' | sort | uniq -c | sort -n
「あー、XXX.XXX.XXX.XXXから異常なほどアクセス来てますね」
「うちのユーザじゃないな。じゃあ切っちゃえ」
マルチコア時代のshell programming (スコア:1)
それはさておき,TBレベルのデータをがしゃがしゃやってると grep,awkとかが飛び交うのって,古くさそうでありながら 意外と SMP/マルチコア時代のリソース活用法としても成立してるんだよね.
grep とか awk などの伝統的ツール群で,ある程度絞り込んでから python(perlでもrubyでも可)のメイン処理スクリプトに食わせるようなことをすると, top で見た時にメインのプロセスの他に,grep,awk系がそれぞれCPU 80% とか食ってたりします. これも,複数コアを活用した立派なconcurrent 処理による高速化ですよね.
案外,伝統技法もモダン環境で有効活用できるもんですな. (並列処理とは違うかも知れないし,効率化にも限度はあるけど,それはそれでいいじゃない)
Re:それをつかわないなんてもったいない (スコア:1)
http://www.socallinuxexpo.org/scale5x/presentations/schaumann.pdf [socallinuxexpo.org]
CAT5は秀逸だと思うんだな。
Re:ソースは俺 (スコア:1, 参考になる)
カッコイイとかそんなのどうでもよくなります。作業効率大幅アップ。
Windowsでも使えます。UnixUtilsとかMinGW、MSYS辺りでググってみて下さい。
併せてNyacusもお薦め。
Re:有限会社ユニバーサル・シェル・プログラミング研究所 (スコア:2, おもしろおかしい)
> UPS出版から出るそうですが、UPS(ユニバーサル・シェル・プログラミング研究所)
これをawkで s/UPS/USP/g するスクリプトを書けという前フリなんだろうけど、書けない!
Your 金銭的 potential. Our passion - Micro$oft
Tsukitomo(月友)
Re:有限会社ユニバーサル・シェル・プログラミング研究所 (スコア:2, 参考になる)
solaris の /usr/bin/awk は gsub() が使えないんだよね…。
たぶん最初期の awk に近いものなんじゃないかと思う(ほんとにそうなのかは知らない)。
/usr/bin/nawk ならふつーに使えるんだけど。
#!/usr/bin/awk -f
{
s=$0
while(n=index(s,"UPS")) s=substr(s,1,n-1) "USP" substr(s,n+3)
print s
}
Re:有限会社ユニバーサル・シェル・プログラミング研究所 (スコア:2)
/usr/xpg?/bin/awk ではどうでしょう?
Re:有限会社ユニバーサル・シェル・プログラミング研究所 (スコア:1)
おそらく,こちらが公式のWebサイトだと思います。
http://www.usp-lab.com/ [usp-lab.com]
日本語版「プログラミング言語AWK」は,何年か前に復刊したはずだと思っていたら,それも絶版になっていたんですね。 今回が3度目の出版ですか。
Re:有限会社ユニバーサル・シェル・プログラミング研究所 (スコア:1)
一桁間違ってません? (スコア:1)
新紀元社版の訳書 [shinkigensha.co.jp]と,原書 [amazon.co.jp]とが両方店頭にあったのですが,選択の余地はありませんでした。
Re:いま使いたいからスクリプト言語 (スコア:1, 参考になる)
AWKはviで、PerlはEmacsみたいな位置づけと思っていた、そんな時代がありました。
Re:いま使いたいからスクリプト言語 (スコア:2, すばらしい洞察)
それが今じゃ Linux Standard Base として perl や python がインストール直後から入っているというご時世だからな。
awk のいいところは拡張性のないところで、awk スクリプトはどこに持っていってもまず動く(nawk が gawkかはあるけど)ところかな。
モジュールで拡張性のあるスクリプトはそれ故にほかの環境ですんなり動かないこともあるからね。
Re:いま使いたいからスクリプト言語 (スコア:1, 興味深い)
OpenBSD ならだいぶ前から /usr/bin/perl があるけど。。。
Re:いま使いたいからスクリプト言語 (スコア:1)
除外されちゃってる FreeBSD の場合ですが、
かつては /usr/bin/perl に入ってたのが、
FreeBSD 5.0 から、ports に追い出されました。 [srad.jp]
まあ、Perl はコアに入れるほどには枯れてないですから、この判断は妥当だと思ってます。
逆に、今時 sed や awk が言語拡張されたら非難されまくりだと思います。
Re:名著流転 (スコア:1)
Re:名著流転 (スコア:1, 興味深い)
Debian/GNU Linux のデフォルト(required)は mawk [debian.org] です。
gawk [debian.org] は optional です。
#あ、original-awk [debian.org]なんてのもありますね
sed、awkして、船、山に上る (スコア:2)
という、(たぶん)MIX格言を以前showさんの連載で学んだことがある。
Re:sed、awkして、船、山に上る (スコア:1)
では童心にかえって (スコア:2)
AWK な栗の木の下で [mahoroba.ne.jp]でも歌いましょうか。(注意:メロディーが流れます)
誰です?AWK な栗とリスの歌 [google.co.jp]とか言ってる人は?
食わない? (スコア:1, すばらしい洞察)
そこは「書かない」じゃないの?
「awk(多く)は書かねぇ、たった一行」と続かないと、小話になりません。
# 洒落の解説は無粋なのでAC
Re:パイプの達人 (スコア:2, おもしろおかしい)
Re:パイプの達人 (スコア:2)
私はpasteもよく使いますよ。
サーバ1台ごとの時系列データを1ファイル 1列の形式で作って、 pasteで全サーバデータをくっつけて、最後はExcelに食べさせてグラフやら 要求元に返してあげる使い方。
Re:「その真価がわかるだろう」と予言 (スコア:3, 興味深い)
Perlって、sedやawkに強く影響を受けてるけどね。文法的にもそうだし、エディタを立てなくても、直接シェルに1行打ち込むだけで結構な仕事が出来るっていう設計、思想は明らかにawkの影響でしょう。
Perlの5.x以降とか、Rubyは正統派(?)のプログラミング言語になっちゃったけど、本来のスクリプト言語は、目的の結果を得られるなら、多少、汚い言語仕様でもいいじゃないかという、近代的なコンピュータサイエンスと逆行する思想だったと思うんだよ。ただ、最近はハードが高速化されたこともあって、かなり大きなシステムもスクリプト言語で記述するようになったから、Rubyが有意義なわけだけど。
Re:「その真価がわかるだろう」と予言 (スコア:2)
「awk はフィルタだが Perl はプログラミング言語だ」とラリー・ウォール [wikipedia.org]がどこかで言っていたような気がする
Re:TSVならそこそこ使えるけど (スコア:1, 参考になる)
フィールドセパレータを変更(-F,もしくはFS=,)すれば大抵いけるはずだが。
各フィールドのデータが,を含む場合はややこしいが、その辺りをよろしくやるのはどのスクリプト言語でも結構大変。というか、完全な自動認識はほぼ無理だろ。
Re:AWKでcgi書く人 (スコア:1)
gawk で cgi を動かす http server を書いて何の問題があります?
という話にしたいんですね。わかります。
# text 処理でなら未だ gawk が基本なので ID で。
Re:今でも AWK と sed (スコア:1)
quiz(6) の ed-command は軽く全問正解できる [bsddiary.net]ぐらいになれば、
sedでたいていのことはマニュアル無しに書けるようになりますよ。
私は、まあ、ホールドスペースとパターンスペースを駆使しだすと、さすがにマニュアルが欲しくなりますが。
昔、Z80 のアセンブラ(ニーモニックからHEXファイルへの変換)をsedで作って、
バイト先の上司に思いっきり呆れられたことがあります。
#ホールドスペースを使ってアドレスは自動インクリメントしますが、
#ラベルからアドレスへの変換機能までは盛り込めなかった…
最近は、そんなレベルだとsedをやめて素直にperlにしてます。