2008年09月29日

awkってあったね このエントリーをはてなブックマークに追加

そーいえば awk ってあったよね。

awk っていえば perl を知る前にずいぶんお世話になった気がする。

Famous Awk One-Liners Explained, Part I - good coders code, great reuse には代表的な awk の one-liner(一行プログラミング) が紹介されていたっす。
懐かしさのあまり数年ぶりに Linux で awk を走らせてみたよ。
やっぱ、便利だな。

なお、awkの基本事項については AWK Cheat Sheet を参考にしてね。

awk はコマンドラインから使ったりすることが多いね。
たとえばこんな感じ。
awk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' ~/.tcshrc
あと、awk独特の予約変数が幾つかあるね。

■awkの予約変数
FS : 入力時のフィールドセパレータ(デフォルトはスペース)
OFS : 出力時のフィールドセパレータ(デフォルトはスペース)
NF : 入力レコードの現在のフィールド番号
NR : 現在の入力レコード番号
RS : レコードセパレータ(デフォルトは改行)

で、上記のサイトの例から幾つかピックアップして実際にやってみた。

サンプルファイル1:test.txt
My name is Taro .
This book is mine .

He is angry .
Her name is Reiko .
She is younger than I .
サンプルファイル2:num.txt
1 2 3
4 10 9 1
8 2
0 2 4
9 1
例1:行番号を表示する(その1)
awk '{ printf("%5d : %s\n", NR, $0) }' test.txt
結果
1 : My name is Taro .
2 : This book is mine .
3 :
4 : He is angry .
5 : Her name is Reiko .
6 : She is younger than I .
例2:行番号を表示する(その2)
awk 'NF { $0=++a " :" $0 }; { print }' test.txt
結果
1 :My name is Taro .
2 :This book is mine .

3 :He is angry .
4 :Her name is Reiko .
5 :She is younger than I .
例3:行数を数える( wc -l )
gawk 'END { print NR }' test.txt
結果
6
例4:各行の和をそれぞれ求める
gawk '{ s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s }' num.txt
結果
6
24
10
6
10
例5:すべての和を求める
gawk '{ for (i = 1; i <= NF; i++) s = s+$i }; END { print s }' num.txt
結果
56
例6:文字(word)がいくつあるかを求める
gawk '{ total = total + NF }; END { print total }' test.txt
結果
25
うーむ、なかなか便利だねぇ。
これから(たまに)使ってみようかな。
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術
この記事へのコメント
登録させてもらいました☆あなたのブログのお値段

なかなか変わりません 仕方が間違えてるのでしょうか?
Posted by 苺みるく at 2008年09月30日 12:14
苺みるくさん、こんにちは。りょーち@管理人です。
苺みるくさんのサイトは
http://x103.peps.jp/mforyoutlove
だと思いますが、あなたのブログのお値段は
http://www.technorati.com/ の情報を見ています。
http://www.technorati.jp/search/http%3A%2F%2Fx103.peps.jp%2Fmforyoutlove
http://www.technorati.com/search/http%3A%2F%2Fx103.peps.jp%2Fmforyoutlove
いずれもリンクが0なので値段が増えないのだと思います。
詳細はこちらのページをご確認ください。
http://www.usamimi.info/~ryouchi/technorati/index.php
Posted by りょーち at 2008年09月30日 12:30
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: