Approccio più semplice:
tr -d '"' <a.csv >b.csv
Usa gsub()
funzione per la sostituzione globale
$ awk '{gsub(/\"/,"")};1' input.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
Per inviare l'output a un nuovo file usa >
operatore di shell:
awk '{gsub(/\"/,"")};1' input.csv > output.csv
Anche il tuo approccio di divisione in matrice può essere utilizzato, sebbene non sia necessario, ma puoi usarlo in questo modo:
$ awk '{split($0,a,"\""); print a[2]}' input.cvs
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
Nota che in questa particolare domanda lo schema generale è che le virgolette sono all'inizio e alla fine della riga, il che significa che possiamo anche trattarlo come separatore di campo, dove il campo 1 è nullo, il campo 2 è 1,2,3,4
e anche il campo 3 è nullo. Quindi, possiamo fare:
awk -F '\"' '{print $2}' input.csv
E possiamo anche eliminare la sottostringa dell'intera riga:
awk '{print substr($0,2,length($0)-2)}' quoted.csv
Parlando di rimuovere il primo e l'ultimo carattere, c'è un intero post su StackOverflow a riguardo con altri strumenti come sed
e shell POSIX.
Un'altra soluzione con sed
:
sed -e 's/"//g' a.csv > b.csv