2010-11-24 4 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" 
    } 
    } 
} 

das awk-Skript für mich nicht funktioniert ich versuche, von einer Linie zur anderen, dh id=22 bis end (der Grund, ich verwende nicht /<string>/,/<string>/ zu suchen ist, weil ich will, eine große Linie nach jedem Block der Suche) und ich möchte dies nur mit Variablen.
ich konnte direkt die Muster verwenden if ($0 ~ /end/) { aber ich möchte nicht tun, dass ich die Variablen innerhalb der Suchmuster verwenden möchten (Grund, warum ich die Werte in den Variablen dynamisch gründlich die Schale werden immer)Verwendung von Variablen in Suchmuster in awk Skript

bitte teilen Sie mir, wie Variablen für awk in das Suchmuster verwenden

dank ...

Antwort

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

bearbeiten

pro Anfrage modifiziert, um die Zeile vor "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;} 
} 

Oder mehr 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

habe es,/wird nicht in der variablen Wert, danke !!!!! – Omkar

+0

Wie drucke ich die Zeile vor 'id = 22' für das obige Skript – Omkar

+1

@Omkar Aktualisiert. Bitte denken Sie daran, Ihre bevorzugten Antworten im Stapelüberlauf zu akzeptieren und eventuell zu aktualisieren. –

0

kompaktere Version von belisarius awk Skript zu drucken, ohne ‚wenn ist

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

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