Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/08/2018, à 17: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, à 20:19)

Hors ligne

#2 Le 29/08/2018, à 17: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, à 17: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.

Hors ligne

#4 Le 29/08/2018, à 18: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 résolu, 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, à 19: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.

Hors ligne

#6 Le 29/08/2018, à 19: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 résolu, 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, à 19: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.

Hors ligne

#8 Le 29/08/2018, à 19:37

paulwoisard

Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]

sinon on peut juste enlever les unités ?

Hors ligne

#9 Le 29/08/2018, à 19: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, à 19: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

Hors ligne

#11 Le 29/08/2018, à 19:46

Watael

Re : Bash ne garder que les valeurs numériques d'un csv [RÉSOLU]

ET le résultat attendu !!!


eval, c'est mal.

Hors ligne

#12 Le 29/08/2018, à 19: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, à 19: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.

Hors ligne

#14 Le 29/08/2018, à 20: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, à 20: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.

Hors ligne

#16 Le 29/08/2018, à 21: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.


eval, c'est mal.

Hors ligne