Jawk とは
Jawk ( http://jawk.sourceforge.net/ ) は JavaVM で動く awk です。 Java が動く環境であれば、jar ファイルを一つ追加するだけで使えます。
Jawk では、AWK プログラムが動くだけでなく、 Java のクラスがプログラムの中で使えます。
Java のクラスを使った例には、
があります。 その他の例は こちらをご覧ください。AWK 言語とは
AWK 言語は、テキストファイルの加工が得意な言語です。 テキストファイルからの入力を、行ごとに分け、 さらに行を空白文字で列に分けて処理します。 AWK の世界では、 行はレコード (RECORD) と呼び、 列はフィールド (FIELD) と呼びます。 Unix では、標準的なコマンドとして awk が用意されています。
AWK 言語については、 テキストの遊園地 などの詳しく書かれたページがあるので、 そちらをご覧ください。 また、このページ右側で、AWK 関連の書籍を紹介しています。
簡単な AWK プログラム
Jawk では、awk のプログラムとほぼ同じものが動きます。 ここでは、簡単な AWK プログラムを紹介します。 以下では、
- プログラム
- 機能
実行方法は、 「Jawk を使ってみる ( Windows編 / Unix編 )」 をご覧ください。
行を選択して、その行を表示
行に対する条件を指定するだけで、その条件を満たす行のみの表示ができます。
- NR == 1
- 1 行(レコード)目を表示
- length > 80
- 81 文字以上ある行を表示
- NF > 10
- 列(フィールド)数が 10 を超える行を表示
- NF > 0
- 空行以外を表示
- /#/
- # を含む行を表示
- /^#/
- # で始まる行を表示
- $3 ~ /on/
- 3 列目に on を含む行を表示
- /begin/ , /end/
- begin を含む行から end を含む行を表示
全ての行に対する処理
全ての行に対して、指定した処理をさせることができます。 中括弧 { … } の間に処理を書きます。
列を選択して表示する
- { print $1 }
- 1 列目を表示
- { print $NF }
- 最終列を表示
- { print $( NF - 1 ) }
- 最終列の一つ手前の列を表示
- { print $1 , $NF }
- 1 列目と最終列を表示
加工して表示する
- { print NR ": " $0 }
- 行番号を付けて表示
- { printf $0 }
- 改行文字を削除して表示
- { gsub( "東京" , "大阪" ) ; print }
- 東京を大阪に置き換えて表示
- { gsub( "\",\"" , "\t" ) ; gsub( "^\"|\"$" , "" ) ; print }
- CSV形式をタブ区切りに変換
対象となるCSV形式は、値が " でくくられていて、, で値が区切られているものです。 値部分に、" や , やタブ文字や改行文字などが含まれていると、 正しく動作しない場合があります。 値をタブ文字で区切った形式に変換して表示します。
選択した行に対する処理
行の選択と、行に対する処理を組み合わせることができます。- FNR <= 3 { print FILENAME ": " $0 }
- ファイルごとに、3 行目までを行頭にファイル名をつけて表示
Jawk 0.14 では動作しません。
次は… さっそく使ってみる