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 24/05/2017, à 13:18

Link_Octree

Restreindre grep à une seule colonne ?

Bonjour,
Je dispose du fichier-type.txt suivant:

23 May 2017 09:27:16,8651,81.***.**.***,BT,BT,United Kingdom,DORSET,BRIDPORT,WINDOWS NT 10.0,768X1366,EN-US,CHROME,58.0.3029.110,GMT+00:00,,A,2
23 May 2017 09:23:14,79617154,94.**.***.**,OTENET S.A.,OTENET S.A.,Greece,DRAMA,DRÁMA,WINDOWS NT 6.1,1050X1680,EL,CHROME,58.0.3029.110,GMT+02:00,,C,1
23 May 2017 09:01:04,127,94.***.**.***,OTENET S.A.,OTENET S.A.,Greece,ATTIKI,ATHENS,WINDOWS NT 6.1,1080X1920,EL,CHROME,58.0.3029.110,GMT+02:00,,G,1

Je voudrais "séparer" ce fichier selon la valeur du champ n°16. Ce champ peut avoir plusieurs valeurs possibles, listées dans mon fichier valeurs-possibles.txt

Le code devrait, je pense, être proche du suivant:

while read line; do
  cat fichier-type.txt | grep "$line" > A.csv
done <valeurs-possibles.txt

Là où je bloque, c'est comment restreindre grep à une colonne spécifique (la 16 dans mon cas) ?
J'ai essayé pas mal de choses, y compris une adaptation du code suivant, sans succés:

awk -F, '$3 == 12' file.csv

Merci d'avance smile

Hors ligne

#2 Le 24/05/2017, à 14:00

pingouinux

Re : Restreindre grep à une seule colonne ?

Bonjour,
Si j'ai bien compris (car la demande n'est pas très précise), peut-être ceci ?

while read val; do
   awk -F, -vval="$val" 'val==$16{print >val".csv"}' fichier-type.txt
done <valeurs-possibles.txt

Hors ligne

#3 Le 25/05/2017, à 11:35

Link_Octree

Re : Restreindre grep à une seule colonne ?

Merci beaucoup, çà produit exactement le résultat que je voulais smile

Si ce n'est pas trop te demander, pourrais-tu expliquer un peu ta commande ? En particulier le -vval="$val" j'ai cru à une faute de frappe au début.

Hors ligne

#4 Le 25/05/2017, à 11:52

pingouinux

Re : Restreindre grep à une seule colonne ?

awk -v variable_awk=valeur '{On peut utiliser variable_awk ici}' fichier

Voici un extrait de man awk -> OPTIONS

-v var=val
       --assign var=val
              Assign  the  value  val to the variable var, before execution of
              the program begins.  Such variable values are available  to  the
              BEGIN block of an AWK program.

Hors ligne

#5 Le 25/05/2017, à 13:05

moko138

Re : Restreindre grep à une seule colonne ?

En une ligne "si j'ai bien compris (car la demande n'est pas très précise), peut-être ceci" :

cat fichier-type.txt | tr -s " " | cut -d" " -s -f16 > valeurs-possiblesBIS.txt

%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne