#1 Le 29/08/2018, à 16:02
- paulwoisard
Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Bonjour,
Je veux supprimer d'un fichier csv (avec ; comme séparateur) les valeurs non numériques.
J'ai donc voulu utiliser sed :
sed -i 's/[^[:digit:]]/;/g' temp2.csv
Mais cela supprime les retours à la ligne.
Je conserve les valeurs numériques et les points-virgules, mais pas les retours à la ligne.
Comment faire pour que ça marche correctement ?
Dernière modification par paulwoisard (Le 29/08/2018, à 19:19)
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#2 Le 29/08/2018, à 16:24
- pingouinux
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Bonjour,
Pour préciser ce que tu demandes, montre quelques lignes du fichier temp2.csv de départ, et le résultat que tu veux
Hors ligne
#3 Le 29/08/2018, à 16:32
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
c'est que cela décomposait les dates cela a donc décalé les infos que je chercher à traiter.
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#4 Le 29/08/2018, à 17:40
- erresse
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Bonjour,
J'ai fait un petit essai sur ces données. Fichier entrée :
abc;12/01/2018;def;xxx
erf;01/01/2011;xyz;
fin;123;termine
Avec la commande que tu as donnée, j'obtiens en fichier sortie :
;;;;12;01;2018;;;;;;;;
;;;;01;01;2011;;;;;
;;;;123;;;;;;;;
Il semble donc que les retours à la ligne n'aient pas été supprimés par le "sed", mais qu'il remplace chaque caractère non numérique par un ";".
Ce n'est pas ce que tu voulais faire ?
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#5 Le 29/08/2018, à 18:10
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Moi mon csv était un top 10 minutes de mesures par un appareil avec lequel je voulais traiter des données.
du coup le csv avait cette forme
2018/08/29 17:10:15;machin4;2018/08/29 18:10;15u;25u;36u;48u
2018/08/29 17:00:23;machin 4;2018/08/29 18:00;14u;10u;76u;42u
du coup la sortie données ceci
2018;08;29;17;10;15;;4;2018;08;29;18;10;15;;25;;36;;48;
2018;08;29;17;00;25;;4;2018;08;29;18;00;14;;10;;76;;42;
Du coup par exemple, je ne devais plus traiter la colonne 7 mais la 20.
du coup je ne comprenais pas ce qui se passait.
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#6 Le 29/08/2018, à 18:32
- erresse
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Ah bien sûr, si tu remplaces tous les caractères non numériques par autant de point-virgules, dans un fichier csv ça va te générer autant de colonnes que de caractères non numériques, du coup !
Je comprend que ça te décale le format...
Ne peux-tu trouver autre chose que le remplacement des caractères non numériques ? Quel avantage en retires-tu pour le traitement de ton fichier ?
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#7 Le 29/08/2018, à 18:36
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
le truc c'est que mon fichier est donc un top 10 minutes, mais les valeurs qui m'intéressent on des unités attenantes du coup additionner des chaînes de caractères n'a pas le même résultat que d'additionner des nombres entiers.
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#8 Le 29/08/2018, à 18:37
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
sinon on peut juste enlever les unités ?
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#9 Le 29/08/2018, à 18:43
- pingouinux
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Je t'ai demandé en #2 de montrer un exemple et un résultat. Maintenant que tu as donné l'exemple, tu peux montrer le résultat que tu souhaites.
Hors ligne
#10 Le 29/08/2018, à 18:44
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
2018/08/29 17:10:15;machin4;2018/08/29 18:10;15;25;36;48
2018/08/29 17:00:23;machin 4;2018/08/29 18:00;14;10;76;42
sachant que les unités diffèrent selon les colonnes
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#11 Le 29/08/2018, à 18:46
- Watael
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
ET le résultat attendu !!!
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 29/08/2018, à 18:57
- pingouinux
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Essaye ceci :
sed -r 's/([[:digit:]]+)[[:alpha:]]/\1/g' temp2.csv
Hors ligne
#13 Le 29/08/2018, à 18:58
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
C'est ça les colonnes ou il y a des unités (ce que j'avais appelé "u" dans l'exemple), voici un exemple concret
Date;type;autre date;longueur de truc;longueur de machin;longueur de bidules
2018/08/29 17:10:15;machin4;2018/08/29 18:10;15m;10km;76cm
qui deviennent :
Date;type;autre date;longueur de truc;longueur de machin;longueur de bidules
2018/08/29 17:10:15;machin4;2018/08/29 18:10;15;10;76
avec le même ordre de colonne, le but étant d'additionner des valeurs numériques.
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#14 Le 29/08/2018, à 19:05
- pingouinux
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Évidemment, si les données changent à chaque fois…
sed -r '1!s/([[:digit:]]+)[[:alpha:]]+/\1/g' temp2.csv
Hors ligne
#15 Le 29/08/2018, à 19:11
- paulwoisard
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
Merci, je viens de tester et ça marche parfaitement bien, merci.
Actuellement, j'ai une toute petite équipe de bénévoles et on essaye de dév des deux, trois logiciels plus ou moins utile, en voici le site web : https://bit-scripts.github.io/
Hors ligne
#16 Le 29/08/2018, à 20:13
- Watael
Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]
traiter un fichier csv avec sed c'est de la maltraitance.
pour le CSV, le mieux c'est awk.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne