|
Contents
1 はじめに 2 一行の中にある世界 3 Awkのうごかしかた 4 短いプログラム 5 プログラム例 6 フォルダの検査 6.1 はじめに 6.2 ファイル情報のみを抽出する 6.3 ファイル名を抽出する 6.4 その他のデータを整形する 6.5 フォルダ検査の結果とまとめ 7 2つのファイルの比較と連想配列 7.1 はじめに 7.2 2つのファイルを読み込む 7.3 連想配列による比較 8 まとめとバッチファイル化 9 おわりに 10 参考文献・サイト |
4 短いプログラム少しの間、短いプログラムを紹介しましょう。さっきの例で使った表をまた使います。ただ、全ての情報を書くには紙面がいくらあっても足りませんので、ここでは詳しい説明を省きます。AwkはC言語に似た文法なので、Cを少し知っていれば読めると思います。そうでない人も、いろんなことが簡単に書けるんだな、と感じてもらえればいいかと思います。 1) 一部の列を抜き出したい場合「第2項が1000以上の列だけを表示する」という場合を考えてみましょう。Awkでは、{}の前に条件を書くだけで、ある条件に合う列だけを処理することができます。条件は、やはりCのように書くことができます。
Awkでは文の全体が$0という変数に入れられています。従って、
と書けます。実は、条件式だけ書くと、{print $0} が省かれているものとして処理されます。つまり、
が最も簡単なプログラムとなります。できる限り書くのを省略できるような設計になっていることがおわかりになると思います。 結果は以下のようになります。
2) ファイルを読み込む前に何か処理をする出力の最初に「結果」と表示するプログラムをを作ってみましょう。BEGIN{読み込む前の処理}と書くと、ファイルを読み込む前に処理ができます。
結果は以下のようになります。
逆に、読み込んだ後に処理をしたい場合には、END{終了後の処理}とします。 3) 少し応用した例第2項の平均を求め、出力する場合を考えてみましょう。このためには、
という手順を踏む必要があります。 和を求める処理は以下のようになります:
これは、「変数sumの値に今の行の第2項の値を加えろ」という意味になります。全ての変数は、必ず0で初期化されているので、改めて初期化する必要はありません。 次に、この和を、列の数で割ります。この処理は最後にやりますから、前の項で示したEND{終了後の処理}がつかえます。また、列の数は自動的にNRという変数に格納されています。ですから、平均を求めるには、変数sumを使って、sum/NRと書くことができます。
結果は以下のようになりますね。
|