awk とか sed とか

| コメント(0)
最近、なんだかログをパースしてデータ抜き出して、他のプログラムに渡してとかそんなことが続いたので書いてみる。

スペースやタブで区切られたデータから必要な部分を抜き出すときは awk が早くてかつ手軽です。

$ cat hogehoge.txt
dakara 102912 ok 102 at line 1929
$ awk '{print $2}' hogehoge.txt
102912
$ awk '{print $4}' hogehoge.txt
102
perl の配列のインデックスとちがって $1 が最初のカラムの値、なのでログを見ながら「いち、に、さん、し」と数えてから指定してる。声を出しながら数えるとなお良い。

-F オプションでスペースじゃない区切り文字を指定して使ったりすることも多い。

$ cat foobarbaz.txt
id:29129 has been stored successfully Qootas:Model:File:194832:OK
$ awk -F: '{print $5}' foobarbaz.txt
19432
grep みたいにパターンマッチした行だけ表示とか( awk '{$2 ~ /index.html/ {print $11}' access_log )あるけど、ここでは省略。

もうちょっと、複雑というか決まった文字列のあとの数字とかを取りたいときは、sed と組み合わせて、いったん削ってから awk とか。

$ cat e2008.txt
giving [kudos] to al::gore::hack::the::debate[19284482] at current.com
$ sed -e 's/.*::debate\[//' e2008.txt
19284482] at current.com
$ sed -e 's/.*::debate\[//' e2008.txt | awk -F\] '{print $1}'
19284482

あとは、その切り出したデータから、次に起動するプログラムを作っておいて、オプションとかが間違いないのを確認しつつ、最後に | sh - とかで「流し込む」感じがこれまたたまらないのですな。この流し込むタイミングでよく「ドーン」とか言う。

$ sed -e 's/.*;:debate\[//' e2008.txt | awk -F\] '{print $1}'
19284482
$ sed -e 's/.*;:debate\[//' e2008.txt | awk -F\] '{print "/opt/vinfo "$1}'
/opt/vinfo 19284482
$ sed -e 's/.*;:debate\[//' e2008.txt | awk -F\] '{print "/opt/vinfo "$1}' | sh -
URL: http://current.com/items/89363730_al_gore_speaks_at_hack_the_debate_2008
vimeo_id: 1865919
time: 19 hours ago
その都度、まじめにパースするための script とかを作ってもいいんだろうね。けど、一回しか使わないものとかいらないしな。なんといっても、このパイプでどんどん切り刻んでいく感じが「気持ちいい」のだ。ま、それだけの話。おじさん臭いのはかんべん。

sed&awkプログラミング
sed&awkプログラミング
posted with amazlet at 09.01.19
デール ドゥラティ アーノルド ロビンス
オライリー・ジャパン
売り上げランキング: 134103
おすすめ度の平均: 4.5
5 0から書いたことがありません。
5 正規表現をマスターしましょう
4 Sed&awkプログラミング

Comments

コメントする

About Me

このブログは Masayoshi Sekimura によって書かれています。現在はサンフランシスコ市内に在住し Six Apart, Ltd. でエンジニアをしています。 このブログ以外にオンラインでやっている事は qootas.org/sekimura/ で見ることができます。 メールは sekimura+blog@gmail.com までどうぞ。

このブログ記事について

このページは、sekimuraが2008年10月 3日 13:03に書いたブログ記事です。

ひとつ前のブログ記事は「tv.yahoo.co.jp の HH:MM を自分のタイムゾーンにあわせる GM」です。

次のブログ記事は「Mac OS X 10.5 Leopard」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.25