#例
あああ,いいい,ううう,えええ,かかか,ききき
「えええ」と「かかか」の間に「おおお」を追加したい。
=awkで$4の後に「,おおお」を追加すればOK
####コード
echo "あああ,いいい,ううう,えええ,かかか,ききき" |
awk -F, 'BEGIN{OFS=","}{$4=$4",おおお";print}'
####結果
$ echo "あああ,いいい,ううう,えええ,かかか,ききき" | awk -F, 'BEGIN{OFS=","}{$4=$4",おおお";print}'
あああ,いいい,ううう,えええ,おおお,かかか,ききき
2018年8月更新:↑こんな方法を使ってはいけない
たまにアクセスがあるようなので更新します…
上記のように投稿していたのですが、CSVをawkで更新するのは__筋が悪い__のでやめましょう。
確かにawkで「-F,」または「FS=","」を指定すると、カンマ区切りのテキストを扱えるようになります。
しかし、単純にカンマで区切るとまずい場合(例えば、ダブルクオーテーションの中にカンマが存在する場合や、改行が含まれる場合)が結構あります。
そういう「まずい場合」が含まれないことが保証されていればよいですが、
現代でcsvを扱う人間はそんな保証が受けられないことが大半です。
UNIXでCSVを扱うコマンドはないの?
「csvを手軽にUNIXコマンドで操作したい」と思ってこの記事にたどり着いたのかと思いますが、
csvを仕様通りに正確にパースしてくれる(csvの構造を適切に認識してくれる)コマンドは
あまり多く存在しませんし、「これ」といった決定版はありません。
csvを操作するための「csvawk」というコマンドがあればいいのですが、ありません。
※あるにはあるのですが、pythonやPerlで実装されており、速度面で現実的ではありません。
現代のCSVは数GBあることが普通なので…扱うデータが軽いなら使ってみてください。
UNIXでCSVを扱うコマンドはないの?→ある
私の__強い__おすすめは、NYSOL(MCMD)( https://github.com/nysol/mcmd/wiki )です。
このコマンド、全く有名じゃなくて寂しいのですが、
csvを完璧に扱うことができ、しかもとても高速に動作します。GB単位のcsvでも余裕です。
列の抜き出しや集計、ソート、列同士の計算、__列の追加__など、基本的なことを高速に行えます。
SASやSPSSを回したり、BigQueryのようなデータベースに突っ込んだりする必要がなくなります。
カラムの指定方法が「f=column1,column2」など、「f=」を付ける必要があったり、
その他パラメーターの指定方法がUNIXの標準的な仕様と合ってないのは悲しいのですが、
ビジネスでも使える有用なコマンドです。ぜひ使ってみてください。
(回し者ではありません)