LoginSignup
2
1

More than 5 years have passed since last update.

CSV文字列の各フィールドをクォーテーションで囲うawkワンライナー

Last updated at Posted at 2018-09-26

概要

表題の通りです。

最近、某サービスへテーブル的なデータを投入するために必要な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=","を指定したりしてみたんですが、変数に突っ込んだ時点でフィールドという概念がなくなって意味がなくなるし、「結局文字列連結する方が早いか...」と思って上記に至りました:thinking:

おわりに

もうちょっとスマートなやり方があればコメントもらえると嬉しいです...:sob:

参考

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1