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

este script awk no está funcionando para mí Estoy tratando de buscar de una línea a otra, es decir id=22 hasta end (la razón por la que no estoy usando /<string>/,/<string>/ es porque quiero una línea grande después de cada bloque de búsqueda) y quiero esto usando solo variables.
que podría utilizar directamente los patrones if ($0 ~ /end/) { pero no quiero hacer eso, quiero usar las variables dentro del modelo de búsqueda (razón se me va a obtener los valores de las variables de forma dinámica a fondo la cáscara)usando variables en el patrón de búsqueda en escritura awk

aconsejarme cómo utilizar las variables dentro del patrón de búsqueda de awk

gracias ...

Respuesta

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

Editar

Modificado por la petición para imprimir la línea antes de "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;} 
} 

O, más 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

lo obtuve,/no es necesario en el valor variable, gracias !!!!! – Omkar

+0

cómo imprimo la línea antes de 'id = 22' para la secuencia de comandos anterior – Omkar

+1

@Omkar Updated. Recuerde aceptar y, finalmente, invitar a sus respuestas preferidas en desbordamiento de pila. –

0

Más versión compacta de la escritura belisarius awk, sin 'si es

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

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