Avere un file CSV come questo:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
e alla ricerca di risultati come:
HEADER
first, column|second "some random quotes" column|third ol' column
in altre parole, rimuovendo "FOOTER", virgolette all'inizio, alla fine e intorno |.
Finora questo codice funziona:
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
Come vedi il problema è che crea 4 file extra.
Ecco un'altra soluzione, che ha l'obiettivo di non creare file extra e di fare la stessa cosa in un singolo script. Non funziona molto bene
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
non è andare a lavorare con questo, solo con il csv semplificata. Utilizzare un linguaggio di programmazione con una libreria in grado di gestire file CSV reali (Python / Perl / Ruby).