コンテンツ
変換元のテキスト
テキストファイル、カンマ区切りcsv。data.csvという名前で保存
20130207,06,12,ほげほげー1 20130207,09,13.25,ほげほげー2 20130207,12,15,ほげほげー3
変換先のテキスト
JSON、こんな感じで出てほしい
実行
awk -f hogehoge.awk data.csv
こんな感じのソースになった
hogehoge.awk
#!/usr/bin/awk BEGIN { ## Init A1="date";A2="temp";A3="message"; ## get line number cmd = "cat indata.csv |wc -l" cmd | getline t close(cmd) FS=","; printf("["); } { # START MAIN loop if(NR == t) { # データ終了行.カンマを付けない printf("{") printf(""%s": %s,"%s": %s,"%s": "%s"",A1,$1,A2,$2,A3,$3); printf("}") } else{ # 1こめ〜データ終了の1個前まで.カンマをつける printf("{") printf(""%s": %s,"%s": %s,"%s": "%s"",A1,$1,A2,$2,A3,$3); printf("},") } } # END MAIN loop END { printf("]};n"); }
が…
フィールド数3つと思ってたら4つだった/(^o^)\
ここらへん
printf(""%s": %s,"%s": %s,"%s": "%s"",A1,$1,A2,$2,A3,$3);
変えれば出来るんですが、どうもawkさんはprintfの中を'(シングルクオート)でかこむとエラー出すのでダブルクオート出すときはエスケープして出すしかないっぽいです(´・ω・`) エスケープが多いのは打ちにくいし見づらいので苦手、sedもこれが嫌だったりする。
sedの場合はデリミタを%などに変更可能なのでいいですが、awkはそういう言語では無いので変更できないみたい。
まあ元々
awkはテキスト→json変換用言語でも無いので^^; どちらかというとsedの領域な気がするけど、awkにBEGIN,ENDがあるから以外とjson変換もこなすawk。けっこう器用なawkさんであった。おわり。