Aide awk

Résolu
dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk -v RS="[ \n]" '/=/' fichier
    value=XXX
    value=XXY
    value=XYX
    2
  2. Utilisateur anonyme
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      $ 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. dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention   1 621
       
      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
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention  
         
        je préfere conserver value et son contenu

        $ grep -Po '.*\Kvalue=[^ ]*' plop 
        value=XXX
        value=XXY
        value=XYX
        0
    3. dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention   1 621
       
      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
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Essaye alors juste comme ça :

        grep -o 'value=[^ ]*' plop
        0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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. dna.factory Messages postés 19928 Date d'inscription   Statut Modérateur Dernière intervention   1 621
       
      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