Aide awk

Résolu
Bonjour,

J'aurais besoin d'aide pour réaliser la commande suivante :
Dans un fichier, j'ai une commande qui peut être placé à différents endroits.
différentes lignes, mais aussi différentes position dans la ligne.
(et bien évidement, je suis même pas sur que l'info soit présente).
En plus, cette information est composée d'une partie fixe (toujours la même, utilisée pour la recherche), et d'une partie variable (qui m'intéresse)

Pour extraire la ligne, facile, un grep, et c'est reglé.
grep value fichier
Je me retrouve donc avec des lignes pouvant avoir le format suivant

aaaaaaa bbbbbb cccccccc ddddddd value=XXX
value=XXY
aaaaaaa bbbbbb ddddddd value=XYX cccccccc

pour la solution, je l'ai sur le bout de la langue :
Un
awk '{ for(i=1;i<=NF;i++) {if (??????) print $i }}
ce qui me manque en fait, c'est comment faire la condition sachant que ce n'est pas un == mais un contient.

(je suppose qu'en plus, avec mon awk mon grep ne sert plus à rien :)

Merci d'avance pour l'aide



--
Stop failing the turing test !

3 réponses

  1. hello
    $ awk -v RS="[ \n]" '/=/' fichier
    value=XXX
    value=XXY
    value=XYX
    2
    1. cette information est composée d'une partie fixe (toujours la même, utilisée pour la recherche), et d'une partie variable (qui m'intéresse)
      awk '{ for(i=1;i<=NF;i++) {if ($i ~ "^value") print gensub("[^=]*=","","g",$i) }}' 
      XXX
      XXY
      XYX
      1
      1. Contributeur
        $ cat plop 
        aaaaaaa bbbbbb cccccccc ddddddd value=XXX
        value=XXY
        aaaaaaa bbbbbb ddddddd value=XYX cccccccc

        $ grep -Po '.*value=\K[^ ]*' plop
        XXX
        XXY
        XYX
        0
      2. Modérateur
        Arf, j'ai été trop compliqué dans ma demande
        j'avais juste besoin de
        if ($i ~"value")

        (je préfere conserver value et son contenu, donc un print $i est largement suffisant, et au moins, je suis sur de comprendre ce que ça fait quand je reprendrais le script dans1 an...
        0
      3. Contributeur
        @dna.factory
        je préfere conserver value et son contenu

        $ grep -Po '.*\Kvalue=[^ ]*' plop 
        value=XXX
        value=XXY
        value=XYX
        0
      4. Modérateur
        aaa.. j'avais écrit un super message super bien tourné... et j'ai cliqué sur annuler..
        en résumé..
        J'ai bien l'option -P dans mon man, mais quand j'essaye de l'utiliser
        grep: The -P option is not supported
        Debian 4.0
        GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)

        Je garde quand même, ça peut servir (sur le Centos par exemple).
        0
      5. Contributeur
        @dna.factoryEssaye alors juste comme ça :

        grep -o 'value=[^ ]*' plop
        0
    2. Contributeur
      Salut,

      Et si tu nous disais exactement quel résultat final tu veux obtenir ?
      La valeur de value de chaque ligne retournée ou autre chose ?
      0
      1. Modérateur
        en très simplifié : comment faire un recherche 'contient' dans awk.
        qqchquicommence m'a donné la réponse, un peu plus compliquée que ce que je voulais, mais j'ai ce que je voulais dedans, donc c'est bon.
        Merci (et on se retrouve sur mon sujet sur les alias ?)
        0