新しめのawkには面倒なCSVファイルを処理対象としてうまく処理するオプションが追加されている。
awk --csv
を使え
少し説明
面倒なCSVファイルとは例えば以下のようなもの
"カンマが,ダブルクォート内に含まれていたり",this field has spaces,,""
上のCSVを何もせずにawkに通すと、1フィールド目は「"カンマが」になってしまう。
すぐに見つかるワークアラウンドとして、FPAT
という変数にフィールドの定義を代入する方法がある。
ところが、世の中にCSVとして流通しているものを食わせると破綻する場合がある。
特に、フィールド内に改行が含まれているとFPATでは対応できない。
このような問題に対処するため、ついにオリジナルのawk実装であるnawkに--csv
というCSVファイルを読み取るためのオプションが追加された。
大抵のCSVファイルを読み込んでうまくフィールドに分割してくれる。
macOSの場合
macOS Sonoma 14.2.1にインストールされているawk
はawk version 20200816であり、この--csv
オプションを受け付けなかった。
オリジナルのnawkに合わせて、gawkもこの機能が導入されているから、brewで新しいgawkをインストールしたところ機能した。
brew install gawk