awkを用いたテキスト抽出入門
翻訳校正:原井彰弘
awkはテキストを操作する際に役に立つ強力なプログラミング言語だ。ここでは例を挙げながら、awkの紹介をしよう。
sedと同様に、awkもテキストの変換を行うために利用される。ただし、awkは汎用のテキスト変換ツールであると同時に、それ自身がプログラミング言語でもある。スクリプトを記述する際やコマンドラインから操作を行う際には、awkが特に役立つだろう。
awkの強力さを説明するには、例を見ていただくのが一番分かりやすい。それでは、まず以下の例を見てみよう。
$ printf "line one\nline two\n" | awk ‘{print $2, $1}'
one line
two line
上記の例では、行の2つの単語を入れ替えている。awkでは、空白文字で分割されている文字列は変数で操作することが可能である。変数は、1番目の文字列が$1に、2番目の文字列が$2に、というように割り当てられる。例では、変数の順番を指定して表示順を変更しているため、「line one」を受け取ると「one line」が出力されるのである。ここで注意すべき点は、print $2, $1ではなくてprint $2 $1と指定した場合は、2つのフィールドはonelineのように隣り合って出力されるということだ。
awkを利用すると、特定のパターンを含む行の数をカウントすることも可能である。たとえば、以下のような記述ができる。
$ printf "line one\nline two\nline three" | awk ‘/line/ { ++x } END { print x }'
3
$ printf "line one\nline two\nline three" | awk ‘/t/ { ++x } END { print x }'
2
awkはprintf文の出力を受け取り、1つ目の例では文字列lineを検索している。文字列lineが見つかると、その都度変数xの値がインクリメントされ、処理の最後にxの値が表示されるというしくみだ。1つ目の例では、lineは3つの行で見つかっている。一方、2つ目の例では文字列tは2つの行のみで見つかっている。
より実用的な例をお見せしよう。badprogという名前のプログラムが、頻繁にシステム上で問題を発生させているとする。しかし、そのプログラムはどうしても動作させる必要があるのだ。さて、システムの負荷平均が4.00に達したときに、すべてのリソースを食い尽くしてしまわないようプログラムをkillし、再起動したいとする。
#!/bin/sh
if [ "`cat /proc/loadavg | awk ‘$1 > 4 {print $1}'`" ]; then
pid="`ps ax | grep badprog | grep -v grep | awk ‘{print $1}'`"
for x in ${pid}; do
kill -9 ${x}
done
/usr/bin/badprog &
fi
お分かりのように、awkは2度利用されている。1度目は負荷平均が4.00より高い場合にその値を出力する目的で、2度目はpsコマンドの出力から最初のカラムを取得し、pidを入手する目的で利用されているのだ。スクリプトは、その後ループを用いてマッチしたpidすべてをkillし、最後にプログラムをバックグラウンドで再起動している。
awkは非常に強力であり、多くのことを実行できる。上記の例ではその強力さの一部をお見せしたが、ぜひさらにawkの世界を探求して、awkでできることすべてを確かめて欲しい。それだけの価値はある。
awkについてさらに知りたい方は
- 3人の推薦記事
- 2人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- 2日前のトップ記事
- 3日前
- 4日前
- 5日前
- 6日前
- ホワイトペーパー
- 話題のタグ
動画再生耐久レース―フル充電からどれだけ耐えた?
心当たりありませんか--あなたの上司がイヤがる5つの話し方
フォームデザイン虎の巻:複数の選択肢を提供する
フォトレポート:技術サポートの悪夢
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
JailBreakついに:PwnageTool公開
プロジェクトの進行でよくある4つのトラブル
ZDNet Japan Green IT
Techno Exchange
DELLが掲げる「新・仮想化アセスメントサービス」
ZDNet Japan ホスティング特集