Contenu | Rechercher | Menus

Annonce

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 22/02/2019, à 11:57

Ezzmazz

Extraire des lignes d'un .csv en fonction d'un motif

Bonjour,

Je planche sur un projet depuis quelques jours et il y a une commande qui m'échappe.

J'ai un fichiers CSV avec une cinquantaine de colonnes. J'aimerais extraire les lignes de ce tableau ayant une valeur supérieure à 4.00% dans la colonne 23 et de les classer de la valeur la plus grande à la plus petite. Comme je suis débutant, j'ai d'abord essayé d'extraire uniquement la colonne 23 du tableau, de garder uniquement les lignes de la colonne comprenant des valeurs supérieures à 4.00%.


Pour ce faire, voici ce que j'ai fait :

cut -d',' -f23 Mon_fichier.csv > Mon_fichier2.csv

Puis ceci pour garder uniquement les lignes avec les valeurs qui m'intéressent :

 awk '$0+0>4' Mon_fichier2.csv | sort -n -r > Mon_fichier3.csv

Pourriez-vous m'expliquer comment je peux appliquer la même chose au tableau complet, afin d'extraire les lignes complètent, mais seulement celles ayant une valeur de plus de 4.00%  dans la colonne 23 ?


Merci d'avance !

Dernière modification par Ezzmazz (Le 22/02/2019, à 12:00)

Hors ligne

#2 Le 22/02/2019, à 12:23

pingouinux

Re : Extraire des lignes d'un .csv en fonction d'un motif

Bonjour,
Peux-tu montrer quelques lignes de ton fichier, certaines répondant au critère et d'autres non ?

Hors ligne

#3 Le 22/02/2019, à 12:32

Ezzmazz

Re : Extraire des lignes d'un .csv en fonction d'un motif

Voici un exemple de ligne :

1550835041-screenshot-from-2019-02-22-12-30-26.png


Les colonnes continuent jusque la colonne AT. C'est l'exemple typique de ligne que j'aimerais extraire au complet en me basant sur la valeur de la colonne w.

Dernière modification par Ezzmazz (Le 22/02/2019, à 12:32)

Hors ligne

#4 Le 22/02/2019, à 12:43

pingouinux

Re : Extraire des lignes d'un .csv en fonction d'un motif

Ce n'est pas un fichier texte que tu montres. Il faudrait un exemple avec plusieurs lignes, en les copiant-collant dans un terminal, pour pouvoir faire des tests.

Hors ligne

#5 Le 22/02/2019, à 14:04

Ezzmazz

Re : Extraire des lignes d'un .csv en fonction d'un motif

Ah oui, pardon !

Voici un exemple de lignes quand je fais un cat Mon_fichier.csv:

Controller1,NA,ASHEBORO,ASH,B,,3674,4572,1814,3674,4572,1814,1859,#NAME?,0,124.45%,49.39%,19%,1,,"Big Risk, No Spare disk",45.04%,4.35%,12.63%,160,464,,,,,,0,1,1,1,0,410,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,
Controller2,EU,FR,URG,D,,0,0,0,0,0,0,0,#NAME?,0,#DIV/0!,#DIV/0!,#DIV/0!,1,,#N/A,0.00%,0.00%,#DIV/0!,NO STATS,-1088,,,,,,#N/A,#N/A,#N/A,#N/A,0,#N/A,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,
Controller3,EU,FR,URG,D,,0,0,0,0,0,0,0,#NAME?,0,#DIV/0!,#DIV/0!,#DIV/0!,1,,#N/A,0.00%,0.00%,#DIV/0!,NO STATS,-2159,,,,,,#N/A,#N/A,#N/A,#N/A,0,#N/A,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,
Controller4,NA,STARR,STA,D,,4430,6440,3736,4430,6440,3736,693,#NAME?,0,145.38%,84.35%,18%,1,,No more Data disk,65.17%,19.18%,-2.18%,849,-96,,,,,,0,2,1,2,2,547,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,

Il faudrait que je puisse extraire la ligne 1 et 4 au complet car ce sont les seules présentant une valeur supérieure à 4.00% dans la colonne W.

Dernière modification par Ezzmazz (Le 22/02/2019, à 15:01)

Hors ligne

#6 Le 22/02/2019, à 16:21

credenhill

Re : Extraire des lignes d'un .csv en fonction d'un motif

hello

$ awk -F "%*," '$23 > 4' fichier.csv
Controller1,NA,ASHEBORO,ASH,B,,3674,4572,1814,3674,4572,1814,1859,#NAME?,0,124.45%,49.39%,19%,1,,"Big Risk, No Spare disk",45.04%,4.35%,12.63%,160,464,,,,,,0,1,1,1,0,410,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,
Controller4,NA,STARR,STA,D,,4430,6440,3736,4430,6440,3736,693,#NAME?,0,145.38%,84.35%,18%,1,,No more Data disk,65.17%,19.18%,-2.18%,849,-96,,,,,,0,2,1,2,2,547,65%,1.1,1.1,1.3,0.65,0.65,0.75,0.04,0.1,,,,,,,,,

Hors ligne

#7 Le 22/02/2019, à 17:42

pingouinux

Re : Extraire des lignes d'un .csv en fonction d'un motif

Voici une méthode plus compliquée, mais qui fait le tri des valeurs :

awk -F"%*," '{if($23>4)t[$23]=$0}END{asorti(t,d,PROCINFO["sorted_in"]="@ind_num_desc");for(i in t)print t[i]}' Mon_fichier.csv

Hors ligne

#8 Le 22/02/2019, à 19:59

Watael

Re : Extraire des lignes d'un .csv en fonction d'un motif

pourquoi utiliser asorti() si tu peux utiliser PROCINFO["sorted_in"] ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 22/02/2019, à 20:08

pingouinux

Re : Extraire des lignes d'un .csv en fonction d'un motif

@Watael #8 :
Tu suggères sans doute ceci, que je ne connaissais pas. Merci pour le tuyau.

awk -F"%*," '{if($23>4)t[$23]=$0}END{PROCINFO["sorted_in"]="@ind_num_desc";for(i in t)print t[i]}' Mon_fichier.csv

Hors ligne