以下のような行の先頭が空のCSVを用意する
input.csv
,b,c,d,e,f
g,h,i,j,k,l
gawk(バージョン:GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)) で加工出力してみる。
gawk -v FPAT='[^,"]*|"([^"]|"")*"' -v OFS=, '{print $1,$2,$3,$4,$5,$6}' input.csv
結果は以下、なぜか先頭が空の行であった1行目が全て空で出力されている。(期待値はinput.csvの内容をそのまま出力してほしい)
,,,,,
g,h,i,j,k,l
納得できないため、1項目ずつちゃんと加工できているか調べてみる。
gawk -v FPAT='[^,"]*|"([^"]|"")*"' -v OFS=, '{for (i=1; i<=NF; i++) printf "field #%d: %s\n", i, $(i)}' input.csv
結果は以下、field #1は空、それ以外もCSV通りである。
したがって、FPATなどオプションが間違っているわけでもない。
field #1:
field #2: b
field #3: c
field #4: d
field #5: e
field #6: f
field #1: g
field #2: h
field #3: i
field #4: j
field #5: k
field #6: l
なんで?ということで、stackoverflowに質問。
バグでした
回答を頂いたEd Mortonさんによると、過去あったバグ(https://lists.gnu.org/archive/html/bug-gawk/2017-04/msg00000.html )と関連があるもので、以下のように
{oFPAT=FPAT; FPAT=""; FPAT=oFPAT}
を追加することで対処することができる
gawk -v FPAT='[^,"]*|"([^"]|"")*"' -v OFS=, '{oFPAT=FPAT; FPAT=""; FPAT=oFPAT} {print $1,$2,$3,$4,$5,$6}' input.csv
上記バグはEdさんが開発者に報告済み
https://lists.gnu.org/archive/html/bug-gawk/2019-10/msg00041.html
感謝します。