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
Comme alternative, vous pouvez également utiliser cette
sed
commande:la source
Perl, la "tronçonneuse de l'armée suisse" du traitement de texte en ligne de commande, peut également le faire. La syntaxe est (pas par coïncidence) assez similaire aux exemples
tr
etsed
:ou:
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 dans tout éditeur de texte prenant en charge la recherche et le remplacement:
Ouvrez le fichier CSV dans votre éditeur de texte préféré (comme gedit, kate, mousepad, etc.; même le vieux bloc-notes ou Wordpad sur Windows peut le faire).
Sélectionnez "Rechercher et remplacer" dans le menu (généralement trouvé sous "Modifier", s'il n'y a pas de menu "Rechercher" distinct).
Entrez
_
dans la zone de recherche et,
dans la zone 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 1 000 fichiers au lieu d'un seul, alors l'apprentissage d'un nouvel outil en ligne de commande commence à avoir du sens. Et, bien sûr, une fois que vous savez 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 vous attendez pas à devoir refaire, parfois un outil interactif de base comme un éditeur de texte est la solution la plus simple.
la source
Vous pouvez également le faire avec
vim
.Ouvrez le fichier:,
vim input.csv
puis utilisezvim
l'outil de recherche avancée des
. Tapez colon (:
) pour passer en mode commande et exécutez des commandes comme celle-ci:À peu près les mêmes commandes que dans la réponse d'IanC, mais à l'intérieur
vim
au lieu d'utilisersed
.la source
Pourquoi ne pas simplement modifier les valeurs par défaut des valeurs de séparateur d'entrée et de sortie
la source