Avoir un fichier CSV comme ceci:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
et cherchant un résultat comme:
HEADER
first, column|second "some random quotes" column|third ol' column
autrement dit, supprimer "FOOTER", les guillemets au début, à la fin et autour de |.
Jusqu'à présent, ce code fonctionne:
sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe
Comme vous voyez le problème est qu'il crée 4 fichiers supplémentaires.
Voici une autre solution, qui a pour but de ne pas créer de fichiers supplémentaires et de faire la même chose dans un seul script. Ça ne marche pas très bien.
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
ne va pas travailler avec cela, seulement avec CSV simplifié. Utilisez un langage de programmation avec une bibliothèque capable de gérer de vrais fichiers CSV (Python / Perl / Ruby).