awkでCSVを扱うために、gawk 4.0 で FPAT=([^,]+)|(\"[^"]+\")
を指定します。
列の値が空文字列の場合 (,,,
みたいにカンマが連続する場合)には列数を数え損ねるのですが、FPAT=(,?[^,]+)|(,?\"[^"]+\")
と書いたらなんかうまくいきました。
2015-07-04 by matobaa+qiita@gmail.com
制限事項
- ダブルクォートの中に改行がある形式には対応していない。
- ダブルクォートをエスケープしたものには対応していない。
- 1列目以外は切り出し文字列の頭に
,
が入るので、もし加工するならsub(",","",$N)
してから加工してsub("^",",",$N)
してやる必要がある。
どういう意味?
FPAT は gawk 4.0 以降でつかえる、フィールド切り出しルールを正規表現で指定できる変数です。
-
[^,]+
カンマ以外からなる文字列 -
\"[^"]+\"
ダブルクォートで始まり、ダブルクォートを含まない文字列をへて、ダブルクォートで終わる
未確認なこと
アクションを指定しない場合に print
を補うか、補わないかにばらつきがあるような気がする。
とりあえず、可搬性を高めるために、{next} か {print} を書いてます。