GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer le trait de soulignement par une virgule et supprimer les guillemets doubles dans CSV

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 :

  1. 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).

  2. 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é).

  3. Entrez _ dans le champ de recherche, et , dans la boîte de remplacement.

  4. Cliquez sur "Remplacer tout".

  5. Répétez avec " dans la zone de recherche et rien dans la zone de remplacement.

  6. 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.


Linux
  1. Quand les guillemets doubles sont-ils nécessaires ?

  2. Pourquoi le tilde (~) ne se développe-t-il pas à l'intérieur des guillemets doubles ?

  3. Comment échapper aux guillemets dans Shell ?

  4. La différence entre les guillemets "...", "...", $'...' et $"..." dans le shell ?

  5. Envelopper une commande qui inclut des guillemets simples et doubles pour une autre commande ?

WAZUH Détecter et supprimer les logiciels malveillants – Virus Intégration totale

Différence entre les guillemets simples et doubles dans Bash Shell

Ajouter des guillemets autour des champs dans la sortie du script AWK ?

Qu'est-ce que le double point (..) et le point unique (.) sous Linux ?

comment supprimer les guillemets doubles dans un csv

Suppression de vg et lv après la suppression du disque physique