AWK˜plus for Java

AWK 使ってます?

桔梗
「AWK、ログ解析」で検索すると以下のような記事がヒットします。
  • 「Apache ログを awk と uniq だけで集計する」
  • 「awkコマンドを使ってログファイルを見やすくした」
  • 「ログ解析に便利なawk」
インフラ屋さんにとって必須ツールのようですね。

そこで今回は、CSV ツールをご紹介します。
  • 特徴
  • 入出力ファイルのフィールドセパレータを指定できる
  • 出力フィールドの並びを自由に指定できる
  • 出力フィールドを、sprintf 関数を使ってフォーマットできる
    (特に、Windows SORT の Key 部作成)
  • SORT に使ったキーフィールドを削除できる

コードから見る AWK˜plus、CSVツール

csv1
  • 03. -F : 入力フィールドセパレータ (FS)、初期値は空白で /[ \t]+/ の意味
  • 04. OFS : 出力フィールドセパレータ (OFS)、初期値は空白
  • 05. col : 出力フィールドをカンマで区切って指定します (0 は、レコード全体)
  • 06. fmt : 05. に対応したフォーマットを指定します ("%"は省略、変換しない場合は、",")
    後方のフォーマットを指定しない部分は省略可能です。
  • 07. stdout : 出力ファイルを指定します (GAWK 拡張)
  • 09~10. : カンマで区切りで連想配列 (Map) を作成します
  • 12~21. : メインアクション、1 レコード毎に繰り返します
Q。 ところで、20. のリダイレクトて何の意味があるの?
A。 主に AWK˜plus for Android の nano Shell で使用します。
APP でリダイレクトできると、コマンドラインのリダイレクトは不要になります。
また、出力ファイルのコード指定が可能になります。-v stdout=file:///foo[#SJIS]
さらに入力ファイルは、URL 指定が可能です。https://foo[#SJIS]

どうですか?シンプルですね、
全てのパラメータ設定を -v var=val で行う所がミソです。

ところで、Trad AWK で動かしたい ...

csv2
  1. 簡単です
  2. グローバル変数定義を、BEGIN の下に移動します
  3. 変数が省略されていたら、初期値を代入します
    例えば、if (col == "") col = 0
  4. GAWK 以外で動かす場合は、stdout を削除してください

実行

command line
$(PLUS) csv.awk -v col=2,2,1 -v fmt="04d, 4d,-4s" csvTest.csv
input
f   3
g   2
h   1
※UTF8   0
output
0003    3 f   
0002    2 g   
0001    1 h   
0000    0 ※UTF8 

トラップにつまずきました

command line
$(PLUS) csv.awk -v col=2,2,1 -v fmt="%04d,% 4d,%-4s" csvTest.csv >csvout3.tmp
output
C: sers\???\AppData\Local\Temp\make12620-1.bat4d -4s f
C: sers\???\AppData\Local\Temp\make12620-1.bat4d -4s g
C: sers\???\AppData\Local\Temp\make12620-1.bat4d -4s h
C: sers\???\AppData\Local\Temp\make12620-1.bat4d -4s ※UTF8
  • 症状
  • Win#make を使用し、AWK˜plus、GAWK でリダイレクトするとゴミが出力される
  • Cygwin#make は正常
  • stdout を省略しコマンドラインでリダイレクトした時のみ発生する 謎^^);
  • 対策
  • ウイルスみたいなコードには、心当たりが無いため一日悩みました
  • 「ところでう~さん、バッチファイルで変数参照て、どうやるんだっけ?」
    『知らん、バッチて何?』
  • fmtを "%04d" から "04d" に変更しました
OS が怪しいと思っていましたが、あながち外れていません。
"%04d,% 4d,%-4s" の %04d,% で Temp が参照されあとは、残りの "4d -4s" が出力されています。
”%” は ”%%” でエスケープできるそうで「バッチファイルには近づくな」とのアドバイスもありました。

おまけ

MATRIX HTMLスクリーンセーバー (Firefoxバージョン)
MATRIX HTMLスクリーンセーバー (Chrome, Edgeバージョン)

終わりに、AWK のおすすめ本

  1. 「 プログラミング言語AWK」AWK開発者達が書いた、教科書+アルゴリズム本、1989年
  2. 「 AWKを256倍使うための本」アスキー、1993年
  3. 「AWK」ウィキペディア (exit の説明は不適切!ブロックを終了するが正解)
  4. 日本では、月間ASCIIが特集を組み一大ブームが巻き起こった、1989~1991年

オープンソース

インストール

  1. Java をダウンロード(環境を汚さない .zip 版を推奨、複数の Javaもインストールできます)「Java Downloads」
  2. AWK~plus をダウンロード「AWK~plus for Java」 (コマンドを添付しています)
  3. AWK~plus フォルダ中の makefile の JAVAHOME 変数に Javaホームパスを設定します。

実行

ターミナルを開き、AWK~plus フォルダをカレントディレクトリにして、と入力します。

「Blog top」 2022.9.2