Approche la plus simple :
tr -d '"' <a.csv >b.csv
Utilisez gsub()
fonction de substitution 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
Pour envoyer la sortie vers un nouveau fichier, utilisez >
opérateur shell :
awk '{gsub(/\"/,"")};1' input.csv > output.csv
Votre approche de fractionnement en tableau peut également être utilisée, bien que ce ne soit pas nécessaire, mais vous pouvez l'utiliser comme suit :
$ 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
Notez que dans cette question particulière, le modèle général est que les guillemets sont au début et à la fin de la ligne, ce qui signifie que nous pouvons également traiter cela comme un séparateur de champs, où le champ 1 est nul, le champ 2 est 1,2,3,4
, et le champ 3 est également nul. Ainsi, nous pouvons faire :
awk -F '\"' '{print $2}' input.csv
Et nous pouvons également supprimer la sous-chaîne de toute la ligne :
awk '{print substr($0,2,length($0)-2)}' quoted.csv
En parlant de supprimer les premier et dernier caractères, il y a tout un article sur stackoverflow à ce sujet avec d'autres outils tels que sed
et shell POSIX.
Une autre solution avec sed
:
sed -e 's/"//g' a.csv > b.csv