メールマガジン 経営相談 情報技術 活動実績 経歴等 問合せ リンク
  awkコマンド
 awkコマンドは、パターンマッチングにより処理を行うUNIXコマンドです。もちろん、Linuxにもこのコマンドはあります。sed同様に文字の置換や削除などのテキスト編集ができますが、大きな違いはレコード(エディタで言う行)をフィールドという単位に分けて処理ができることです。

awkのメリット
 awkを使うことのメリットは、
  1. 正規化されたパターンで処理できるので、プログラムが簡単
  2. 処理が軽い(sedも同じ)
  3. フィールド操作が容易
などです。CGIで有名なperlなどのテキスト操作言語もありますが、バッチでちょろっとやる時にはawkは気軽です。

GNU awkのインストール
 sed同様、Windowsでも使えるようなものがありますので、興味のある方はぜひやってみてください。Vector等のソフトウェアダウンロードサービスのサイトから落とすことができます。ダウンロードしたら、解凍して、そうですね、awk.exeをc:\windows\commandあたりのディレクトリに移しておけば、良いと思います。インストールはその程度です。
 ちなみにLinuxでは設定しなくても、インストール時にデフォルトのコマンドとして使えるようになっています。

サンプル1
 こんな感じです。超概略ですが。。。 これはsample.awkというファイルに書いてあるawkプログラムを使って、test.txtを処理し、結果をresult.txtに書き出せという意味です。
awk -f sample.awk test.txt > result.txt
 じゃあ、sample.awkには何を書くのでしょうか。次のサンプルを見ましょう。

サンプル2(私が実行中のこと)
 前回のsedの時に私がしたいことを書いていました。それは、
Who:Mr.Sagawa
Where:From Office
Services:telnet
Mr.Sagawa|From Office|telnet
にしたいというものでした。要は縦に並んでいるものを横にしたいというものです。awkプログラムは次のように書きます。
BEGIN {
out = "";
FS=":";
}
/^Who/ {out = $2}
/^Where/ {out = out $2 "|"}
/^Services/ {out = out $2 "|"}
END {
print out
}
という感じです。これは1つしかグループがないと想定したプログラムですので、実際にはもう少し複雑です。一部だけ説明すると、/^Who/というところは、行の先頭がWhoだったら、outという変数に2つ目のフィールドの情報を保存しておいてください、という意味です。最後にprintで書き出して終わりです。もっと詳細を知りたい方は文献をお読みいただくか、私まで連絡をどうぞ。
初めに戻る