Un moyen beaucoup plus simple consiste à 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 que tr
prend 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 input.csv
saisir tr
le flux stdin via <
opérateur shell et dirigez la sortie résultante vers tr -d '"'
pour supprimer les guillemets doubles.
Mais awk
peut le faire aussi.
$ 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 codeblock pour chaque ligne. gsub()
La fonction est utilisée pour la substitution globale dans une ligne, nous l'utilisons donc pour remplacer les traits de soulignement par des virgules et les guillemets doubles par une chaîne nulle (supprimant effectivement le caractère). Le 1
est à la place de la correspondance de modèle avec le bloc de code manquant, qui par défaut affiche simplement la ligne ; autrement dit le codeblock avec gsub()
fait le travail et 1
imprime le résultat.
Utiliser la redirection shell (>
) pour envoyer la sortie vers un nouveau fichier :
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv
Comme alternative, vous pouvez également utiliser ce sed
commande :
$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Perl, la "tronçonneuse de l'armée suisse" du traitement de texte en ligne de commande, peut également le faire. La syntaxe est (ce n'est pas un hasard) assez similaire au tr
et sed
exemples :
perl -pe 'tr/_"/,/d' input.csv > result.csv
ou :
perl -pe 's/_/,/g; s/"//g' input.csv > result.csv
Mais honnêtement, si vous ne voulez pas prendre le temps d'apprendre un nouveau langage de programmation (ce qui est vraiment ce que sont awk, Perl et sed et d'autres outils comme eux) juste pour cette tâche de base, vous pouvez tout aussi bien le faire en tout éditeur de texte prenant en charge la recherche et le remplacement :
-
Ouvrez le fichier CSV dans votre éditeur de texte préféré (tel que gedit, kate, tapis de souris, etc. ; même le bloc-notes ou Wordpad sous Windows peut le faire).
-
Sélectionnez "Rechercher et remplacer" dans le menu (généralement situé sous "Modifier", s'il n'y a pas de menu "Rechercher" séparé).
-
Entrez
_
dans le champ de recherche, et,
dans la boîte de remplacement. -
Cliquez sur "Remplacer tout".
-
Répétez avec
"
dans la zone de recherche et rien dans la zone de remplacement. -
Enregistrez le fichier.
Maintenant, si vous devez le faire pour 100 ou 1000 fichiers au lieu d'un seul, alors apprendre un nouvel outil de ligne de commande commence à avoir du sens. Et, bien sûr, une fois que vous saurez comment utiliser Perl ou sed ou autre, vous économiserez beaucoup de temps et d'efforts avec des tâches similaires plus tard. Mais pour un travail ponctuel que vous ne pensez pas avoir à refaire, un outil interactif de base comme un éditeur de texte est parfois la solution la plus simple.