Création
d'entreprise
Posez votre question Signaler

Commande Awk: récupérer valeur sur une ligne [Résolu]

marco.marco 22Messages postés 1 juillet 2008Date d'inscription 10 novembre 2010Dernière intervention - Dernière réponse le 8 févr. 2010 à 14:40
Bonjour,
Une petite question pour les specialistes de la commande awk:
Voilà, je voudrais récupérer sur une ligne de ce type :
machin6765765|truc00001|chose002334|etc
uniquement la valeur "truc" et les chiffres qui lui succède.
Les séparateurs sont toujours "|" mais la place de cette valeur peut changer sur la ligne (donc pas possible de faire un awk -F"|" '{print $2}'...) ainsi que les chiffres. Et qui plus est elle peut se retrouver plusieurs fois sur la ligne soit avec les memes chiffres, soit avec des chiffres differents.
SAvez vous s'il existe une commmande awk (ou autre chose que awk remarque, je ne suis pas difficile ;-)) qui puisse me permettre de récupérer ca ?
Mille mercis d'avance.
Lire la suite 

Commande Awk: récupérer valeur sur une ligne »

5 réponses
Réponse
+2
moins plus
Salut,

grep -o 'truc[[:digit:]]*' fichier

marco.marco- 8 févr. 2010 à 12:19
Merci jipicy !!
C'est exactement ce que je voulais. Je ne connaissais pas cette commande, comme quoi on en apprend tous les jours ;-)

Merci à toi itou mamiemando (le cut ne fonctionnait pas dans ce cas précis car la valeur pouvant changer de place, un cut ou un awk -f(n) ne m'aurait pas été très utile).
lami20j- 8 févr. 2010 à 12:52
Salut,

ou un awk -f(n) ne m'aurait pas été très utile
Oui, si tu aurais fait le test par champ (j'ai modifié volontairement la position de champ)

$ cat truc
machin6765765|truc00001|chose002334|etc
truc01234|chose002334|etc
iaajlfksd|machin6765765|truc222222|chose002334|etc
aaa|bbb|ccc|machin6765765|truc55555|chose002334|etc
 $ awk -F"|" '{for(i=1;i<=NF;++i)if($i~/truc[0-9]+/) print $i}' truc
truc00001
truc01234
truc222222
truc55555


P.S. Je préfére la solution courte avec grep ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Il y a un point peu clair dans l'histoire : comment la colonne à extraire est-elle choisie ? Elle commence systématiquement par "truc" ?

Autre chose : pour extraire une colonne encadrée de deux '|', un cut suffit amplement. Exemple :

cat fichier.txt | cut -f3 -d'|'


Bonne chance
Ajouter un commentaire
Réponse
+0
moins plus
Je ne pensais meme pas qu'on pouvait intégrer une boucle dans un awk !
Puissant comme commande ! J'ai adopté ta première solution cela dit ;-)
Ajouter un commentaire
Ce document intitulé « Commande Awk: récupérer valeur sur une ligne » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?