[shell_ksh] Problème avec awk

Résolu
Mioux -  
 Mioux -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. Mioux
       
      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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
      1. Mioux > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Un grand merci dubcek, c'est exactement ce qu'il me faut!!
        C est un double résolu que tu mérites :)
        0