2010-11-24 27 views
5
#!/usr/local/bin/gawk -f ` 

{ 
awkvar2="/id=22/"; 
awkvar3="/end/"; 


if ($0 ~ awkvar2) { 
    triggered=1; 
    } 
    if (triggered) { 
    print; 
    if ($0 ~ awkvar3) { 
     triggered=0; 
     print "\n-----------------------------------------------\n" 
    } 
    } 
} 

ce script awk ne fonctionne pas pour moi je suis en train de rechercher d'une ligne à une autre-à-dire id=22 jusqu'à end (la raison pour laquelle je ne suis pas en utilisant /<string>/,/<string>/ est parce que je veux une grande ligne après chaque bloc de recherche) et je le veux en utilisant seulement des variables.
je pourrais utiliser directement les modèles if ($0 ~ /end/) { , mais je ne veux pas le faire, je veux utiliser les variables à l'intérieur du modèle de recherche (la raison est que je va recevoir les valeurs des variables shell dynamiquement complet)en utilisant des variables dans le profil de recherche dans le script awk

s'il vous plaît me conseiller comment utiliser les variables à l'intérieur du modèle de recherche pour awk

... merci

Répondre

6
{ 
awkvar2="id=22"; 
awkvar3="end"; 
if ($0 ~ awkvar2) { 
     triggered=1; 
     } 
if (triggered) { 
     print; 
     if ($0 ~ awkvar3) { 
       triggered=0; 
       print "\n-----------------------------------------------\n" 
     } 
} 
} 

Modifier

Modifié par demande d'imprimer la ligne avant "id = 22"

{ 
    awkvar2="id=22"; 
    awkvar3="end"; 
    if ($0 ~ awkvar2) { 
      print prev; 
      triggered=1; 
    } 
    if (triggered) { 
      print; 
      if ($0 ~ awkvar3) { 
       triggered=0; 
       print "\n-----------------------------------------------\n" 
      } 
    } 
    {prev=$0;} 
} 

Ou, plus awkish

BEGIN {awkvar2="id=22";awkvar3="end"} 

($0 ~ awkvar2),($0 ~ awkvar3) { if ($0 ~ awkvar2) {print prev;} 
           print; 
           if ($0 ~ awkvar3) { 
            print "\n---------------\n" 
           } 
           } 
{prev=$0;} 
+0

l'a obtenu,/n'est pas nécessaire dans la valeur de la variable, merci !!!!! – Omkar

+0

comment j'imprime la ligne avant 'id = 22' pour le script ci-dessus – Omkar

+1

@Omkar Mis à jour. S'il vous plaît n'oubliez pas d'accepter et éventuellement upvote vos réponses préférées dans le débordement de la pile. –

0

Plus version compacte de l'écriture Bélisaire awk, sans « si est

BEGIN {awkvar2="id=22";awkvar3="end"} 

($0 ~ awkvar2) {print prev;} 
($0 ~ awkvar2),($0 ~ awkvar3) {print; } 
($0 ~ awkvar3) {print "\n---------------\n"} 
       {prev=$0;}