コードから見る AWK˜plus、CSVツール
- 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 で動かしたい ...
- 簡単です
- グローバル変数定義を、BEGIN の下に移動します
- 変数が省略されていたら、初期値を代入します
例えば、if (col == "") col = 0
- 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 のおすすめ本
オープンソース
インストール
- Java をダウンロード(環境を汚さない .zip 版を推奨、複数の Javaもインストールできます)「Java Downloads」
- AWK~plus をダウンロード「AWK~plus for Java 」
(コマンドを添付しています)
- AWK~plus フォルダ中の makefile の JAVAHOME 変数に Javaホームパスを設定します。
実行
ターミナルを開き、AWK~plus フォルダをカレントディレクトリにして、と入力します。