La manière la plus simple est d'utiliser tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
La façon dont cela fonctionne est qu'il tr
faut deux arguments - ensemble de caractères à remplacer et leur remplacement. Dans ce cas, nous n'avons que des ensembles de 1 caractère. Nous redirigeons le flux stdin de l' input.csv
entrée tr
via l' <
opérateur shell et redirige la sortie résultante vers tr -d '"'
pour supprimer les guillemets doubles.
Mais awk
peut aussi le faire.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
La façon dont cela fonctionne est légèrement différente: awk lit chaque fichier ligne par ligne, chaque script en ligne étant /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Ici, nous n'avons pas de modèle, cela signifie donc exécuter le bloc de code pour chaque ligne. gsub()
La fonction est utilisée pour la substitution globale au sein d'une ligne, nous l'utilisons donc pour remplacer les traits de soulignement par des virgules et les guillemets doubles par une chaîne nulle (en supprimant efficacement le caractère). Le 1
est à la place de la correspondance de modèle avec le bloc de code manquant, qui par défaut est simplement d'imprimer la ligne; en d'autres termes, le bloc de code avec gsub()
fait le travail et 1
imprime le résultat.
Utilisez la redirection shell ( >
) pour envoyer la sortie vers un nouveau fichier:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv