awk のハマりどころ

awk と言っても gawk ね。あとは知らない。

  • 文字列をついシングルクォーテーションで囲んで怒られる
  • 「改行コード取らなきゃ」と思っちゃう
  • 文字列をつい . で連結した気になって怒られる

gawk は Fink で入れた gawk 3.1.4 を使っている。3.1.x は gettext で国際化なんだよねー、gettext よく分からないんだよねーと思ってたんだけど、LANG をきっちり設定するかあるいは何も設定しなければなんかそれでオッケーっぽい。jXXX 関数はないけど別にいいや。1

ところで gawk の 3.1 系統は TCP/IP が扱えたりかなり野心的で面白そうなのに、この日本語を扱う際の最初の一歩でつまづいてる人が多いような気がする。Windows の場合はこれをやる、Linux の場合はこれをチェックしろとかっていう最低限のノウハウがないまま「なんとなく国際化してるらしいけど今までと使い勝手違うからいやなんだよね」という層を作ってしまっているような。

2ch なんかでも gawk3.0.4+mb の方が 3.1.x よりウケはいい2。でもメンテナはもうやる気ないわけですよ。本家が国際化してんだから無理に独自実装のマルチバイト化やる必要ないじゃんと。だったら 3.1.x についていくしかないと思うし、強力になってるんだから、どうせ使うなら 3.1.x 以降を使えた方が幸せになれると思う。

え、全部 Ruby か Python でいいじゃん? んー。なんかねぇ、使っちゃうんですよねぇ。使い続けるスクリプトを作るためには使わない方がいいと思うけど、フィルタとしてはやっぱ使いやすいのよね。

※ 凝り始めると結局 Ruby とかで書き換えちゃうんだけど。

  1. ただし「3.1.5 以降は」国際化のスイッチが入るとすべて jXXX() 相当になるらしい。 

  2. マルチバイト対応のほかに cmd.exe が対応していないシングルクォートに独自に対応しているってのもある。これは cmd.exe のことを考えていないドキュメントの方に問題があるんだよなぁ。 

More