dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

新しいawkを使ってCSVファイルの列を楽に取り出す

新しめの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にインストールされているawkawk version 20200816であり、この--csvオプションを受け付けなかった。 オリジナルのnawkに合わせて、gawkもこの機能が導入されているから、brewで新しいgawkをインストールしたところ機能した。

brew install gawk