← retour aux snippets

awk FPAT: parser un CSV avec guillemets

Utiliser FPAT pour définir des champs CSV robustes (séparateur virgule, guillemets, virgules échappées).

bash text #awk#csv#fpat

objectif

Éviter les découpes naïves qui cassent sur des virgules dans des champs cités.

code minimal

# FPAT: champ = texte entre guillemets ou séquence sans virgule
awk -v FPAT='([^,]+)|("([^"]|"")*")' '{print $2}' data.csv

utilisation

# convertir en TSV propre
awk -v FPAT='([^,]+)|("([^"]|"")*")' '{
  for (i=1;i<=NF;i++) { gsub(/^"|"$/, "", $i); gsub(/""/, """, $i) }
  for (i=1;i<=NF;i++) printf("%s%s", $i, i==NF?"\n":"\t")
}' data.csv > data.tsv

variante(s) utile(s)

# filtrer et sélectionner des colonnes par nom (première ligne = header)
awk -v FPAT='([^,]+)|("([^"]|"")*")' '
NR==1{ for(i=1;i<=NF;i++) h[$i]=i; next }
$h["status"]=="ok" { print $h["id"], $h["name"] }
' data.csv

notes

  • pour CSV complexes (UTF-8, délimiteurs custom), préférez mlr, xsv ou Python.
  • FPAT est supporté par gawk.