概要
表題の通りです。
最近、某サービスへテーブル的なデータを投入するために必要なCSVファイルを作ることがありまして。
その際、各フィールドをクォーテーションで囲むことで、テーブルのスキーマ情報に確実に文字列として認識されるようにしたかったため、こんな小細工をしてました。なんとなく汎用性がありそうなので、ここに記録しておきます。
tl;dr(実行結果)
echo -e "abc,def,ghi\njkl,mno,pqr\nstu,vwx,yz"
#=> abc,def,ghi
#=> jkl,mno,pqr
#=> stu,vwx,yz
echo -e "abc,def,ghi\njkl,mno,pqr\nstu,vwx,yz" | awk -F"," '{ l = NULL; for (i = 1; i <= NF; i++) l = l ((i == 1) ? "" : ",") "\""$i"\""; print l}'
#=> "abc","def","ghi"
#=> "jkl","mno","pqr"
#=> "stu","vwx","yz"
設計(アプローチ
awk初心者なもので、勝手がわからずに、雑にforループでぶん回して各行の出力文字列をつくりました。
これを参考に、OFS=","
を指定したりしてみたんですが、変数に突っ込んだ時点でフィールドという概念がなくなって意味がなくなるし、「結局文字列連結する方が早いか...」と思って上記に至りました
おわりに
もうちょっとスマートなやり方があればコメントもらえると嬉しいです...