Aide awk

Résolu/Fermé
dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024 - 24 déc. 2014 à 15:14
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 24 déc. 2014 à 16:32
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


3 réponses

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
24 déc. 2014 à 16:18
hello
$ awk -v RS="[ \n]" '/=/' fichier
value=XXX
value=XXY
value=XYX
2
Utilisateur anonyme
24 déc. 2014 à 15:40
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
24 déc. 2014 à 15:45
$ 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
dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024 1 612
24 déc. 2014 à 15:52
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024
24 déc. 2014 à 15:54
je préfere conserver value et son contenu

$ grep -Po '.*\Kvalue=[^ ]*' plop 
value=XXX
value=XXY
value=XYX
0
dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024 1 612
24 déc. 2014 à 16:26
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024
24 déc. 2014 à 16:32
Essaye alors juste comme ça :

grep -o 'value=[^ ]*' plop
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
24 déc. 2014 à 15:19
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
dna.factory Messages postés 25333 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 5 novembre 2024 1 612
24 déc. 2014 à 15:53
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