フォト
無料ブログはココログ

MyList

« なぜ、優秀な人ほど成長が止まるのか | トップページ | なぜなぜ分析(実践編) »

2019年1月12日 (土)

awk <古くて新しいLL>

 awkを使い始めて30年。jgawk.exeをDOSで使ったのが最初だ。

 その後UNIXを使うようになった。 UNIXは設定ファイルもログもテキストファイルだからgrepやcat,cut,sort,head,wcなんかで作業するのだが、ちょっと複雑な作業はawkやperlなどのスクリプト言語(LL)を使うことになる。

 今時は何でもExcelに読み込んで処理できる。 昔は数Gbyteのログはオンメモリで処理できないから逐次処理するしかなかった。逐次処理はOneLinerが使えるかどうかで作業効率がずいぶん違う。
例えば、「httpdのaccesslogから特定の日の05:10:00~06:10:50の間のステータスコード500のアクセス元を取り出す」作業はgrep,cut,wcを使うとできるけどawkを使うと100倍簡単だ。

 当時いつでも使えるようにしていたスクリプトは

  • radiusの認証ログから特定ユーザのlogin/logoutを抜き出すスクリプト
  • UNIXタイムで記録されたsquidのログをローカルタイムに変換するスクリプト

 radiusのlogは1レコードが複数行なのでgrepでは難しい。
UNIXタイムで記録されたsquidのlogは見ただけでは日時が分からないので、サーバーのログを見るたためには必須だった。

 当時perlやgawkは全てのUNIXにインストールされているわけではなかったし、manも満足にインストールされていないことが多かったのでawkを使っていた。

awkはどのUNIXにも必ず入っているしmanも使えた。

 gawkはあるかどうか分からないから拡張機能は使わないようにしていた。 というか「プログラミング言語 awk」で勉強したので拡張機能を知らなかったりする。だから、空白でもなく記号でもない文字を表す正規表現は"\w"でもなく"[[:alnum:]_]"でもなく"[_0-9a-zA-Z]"を使っている。

Awk

 最近はUNIX=LINUXになったのawkはgawk(gnu awk)だawkもあるけどgawkへのlinkになってる。
だから互換性はあまり気にしなくても良いのかもしれない。

 プログラミングしているとアスキーコード表が欲しいときがある。そんな時に使える1liner。これまで一番多く使っている。

↓DOS/Windows

>gawk "{for(i=32;i<128;i++)printf(\"%c %02x\",i,i)}"

↓UNIX

$ awk '{for(i=32;i<128;i++)printf("%c %02x",i,i)}'

↓Enterを押すと表示される。

  20 ! 21 " 22 # 23 $ 24 % 25 & 26 ' 27 ( 28 ) 29 * 2a + 2b , 2c - 2d . 2e / 2f
0 30 1 31 2 32 3 33 4 34 5 35 6 36 7 37 8 38 9 39 : 3a ; 3b < 3c = 3d > 3e ? 3f
@ 40 A 41 B 42 C 43 D 44 E 45 F 46 G 47 H 48 I 49 J 4a K 4b L 4c M 4d N 4e O 4f
P 50 Q 51 R 52 S 53 T 54 U 55 V 56 W 57 X 58 Y 59 Z 5a [ 5b \ 5c ] 5d ^ 5e _ 5f
` 60 a 61 b 62 c 63 d 64 e 65 f 66 g 67 h 68 i 69 j 6a k 6b l 6c m 6d n 6e o 6f
p 70 q 71 r 72 s 73 t 74 u 75 v 76 w 77 x 78 y 79 z 7a { 7b | 7c } 7d ~ 7e  7f

 ところで、いまさらだけど、gawkは3.10からscketが使えるようになっていたらしい。

BEGIN {
  host = $1;
  path = "/" $2;
  http = "/inet/tcp/0/" host "/80"
  print "GET " path " HTTP/1.0\nHost: " host "\n" |& http; 
  while(0<(http |& getline)) print;
  close(http);
}

↑こんな感じで
HTTPクライアントが書ける。 (当然だけどレンダリングはできない。)


最近の投稿】【最近のプログラミング】【2018の投稿】【2017の投稿】【2016の投稿】【2015の投稿

« なぜ、優秀な人ほど成長が止まるのか | トップページ | なぜなぜ分析(実践編) »

書籍・雑誌」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: awk <古くて新しいLL>:

« なぜ、優秀な人ほど成長が止まるのか | トップページ | なぜなぜ分析(実践編) »