[shell_ksh] Problème avec awk

Résolu/Fermé
Mioux - 3 déc. 2015 à 09:16
 Mioux - 3 déc. 2015 à 11:47
Bonjour,

Je viens vers vous car je bloque sur une utilisation de awk.
J'ai un fichier qui ressemble à un truc du genre

a B c toto e f ....
a B c titi e f ....
a B c toto e f ....
a B c tutu e f ....
a B c toto e f ....
a B c toto e f ....
a B tutu toto e f ....
....
avec les espaces qui sont des tabulations.

j'ai une chaine qui est
ChercheMot="tutu titi tata" (la les espaces sont vraiment des espaces :) )
je cherche un moyen d'ecrire les lignes avec awk, mais la je galère :
awk -F'\t' -v mot="$ChercheMot" '{ if (mot == "$4") print $0; else print "y a pas"}' fichier_In.txt

Et il me met que des "Y a pas".
Quelqu'un connait il la syntaxe d'une recherche d'une chaine dans une autre dans un if d'un awk? (Pas très clair je sens cette phrase :p)

Merci par avance

1 réponse

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
3 déc. 2015 à 09:43
hello
comme ça ?
$ awk  -v mot="$ChercheMot" '{if (mot ~ $4) print $0; else print "y a pas"}' fichier
y a pas
a B c titi e f ....
y a pas
a B c tutu e f ....
y a pas
y a pas
y a pas
1
Ha oui, ça marche bien en effet :-o
Merci beaucoup.
J aurai une question en plus:
Je peux avoir dans ma chaîne ChercheMot="tata titi tutu totoro ". Y a t il un moyen simple pour que les ligne contenant toto ne s affiche pas? Car on va trouver toto dans le mot totoro.
Encore merci pour la réponse
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
3 déc. 2015 à 10:09
en testant chaque mot de la chaine
$ ChercheMot="tutu titi tata totoro"
$ awk -v mot="$ChercheMot" 'BEGIN {split(mot, t)} {for(n in t)if (t[n] == $4) print $0; else print "y a pas"}' fichier
0
Mioux > dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024
3 déc. 2015 à 11:47
Un grand merci dubcek, c'est exactement ce qu'il me faut!!
C est un double résolu que tu mérites :)
0