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 18/07/2015, à 09:21

Compte supprimé

[Résolu]AWK: récuperer champs après toujours même chaîne de caractères

Bonjour,

J'ai un exemple de texte:

toto 20 34
23 toto 34 56
34 56 45 toto 63 56

Et j'aimerais toujours récupérer avec AWK le champs après toto (1er ligne 20, 2ème ligne 34 et 3ème ligne 63 dans mon exemple)

Dernière modification par Compte supprimé (Le 19/07/2015, à 20:55)

#2 Le 18/07/2015, à 09:53

jplemoine

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

Je ne suis pas spécialiste. Donc, on doit pouvoir faire (beaucoup ?) mieux.

cat testawk.txt | awk -F "toto" '{print $2}' | awk '{print $1}'

où testawk.txt est le fichier qui contient les données.
NB : reste à faire : vérifier s'il n'y a pas d'espace indésirable après la valeur du champ.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 18/07/2015, à 10:30

MicP

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

michel@debG53SW:~/monTest2$ cat fichData 
toto 20 34
23 toto 34 56
34 56 45 toto 63 56
michel@debG53SW:~/monTest2$ awk '/toto/ {sub(/^.* *toto/, ""); print $1}' fichData
20
34
63
michel@debG53SW:~/monTest2$

/toto/                        => Rechercher les lignes dans lesquelles "toto" existe,
sub(/^.* *toto/, "")  => Supprimer dans ces lignes tout ce qui précède et inclus "toto",
print $1                   => Retourner le premier champ.

Dernière modification par MicP (Le 18/07/2015, à 11:16)

Hors ligne

#4 Le 18/07/2015, à 10:41

jplemoine

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

jplemoine a écrit :

Je ne suis pas spécialiste.

J'avais raison... smile
Merci MicP pour une solution meilleure que le mienne...
@Slyfox : la solution de MicP est meilleure que la mienne (ça ne se voit pas sur l'exemple mais sur un gros fichier, elle est beaucoup plus rapide car optimisée). Cette dernière n'avait que le mérite d'exister en attendant mieux...(enfin que tu es quelque chose)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#5 Le 18/07/2015, à 10:43

Ferod

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

Je ne sais pas à quel point awk t'es nécessaire... C'est faisable en tout cas avec sed :

sed -r 's/(.*)(toto )([0-9]*)(.*)/\3/g' fichier.txt

"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich

Hors ligne

#6 Le 18/07/2015, à 11:32

jplemoine

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

C'est une autre solution : je ne sais pas comment on choisit entre sed et awk...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#7 Le 18/07/2015, à 12:40

credenhill

Re : [Résolu]AWK: récuperer champs après toujours même chaîne de caractères

hello
ou avec grep

$ grep -oP '(?<=toto )[0-9]+' fichier 
20
34
63

Hors ligne