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

Résolu
marco.marco Messages postés 30 Statut Membre -  
marco.marco Messages postés 30 Statut Membre -
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.
Configuration: Windows XP
Firefox 3.6

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

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

    2
    1. marco.marco Messages postés 30 Statut Membre 1
       
      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).
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > marco.marco Messages postés 30 Statut Membre
         
        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 ;-)
        0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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
    0
  3. marco.marco Messages postés 30 Statut Membre 1
     
    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 ;-)
    0