Estoy tratando de escribir un awk script que comprueba ciertas condiciones y tira líneas del cumplimiento de esas condiciones.

La condición específica a tirar de las dos primeras líneas del archivo y de cualquier línea que comience con el texto xyzzy:. Para ese fin, codificados hasta:

awk '
    NR < 2    {}
    /^xyzzy:/{}
              {print}'

pensando que iba a tirar las líneas en las que cualquiera de esas dos condiciones se cumplen y la impresión de lo contrario.

Por desgracia, parece que el print está siendo procesada, incluso cuando la línea coincide con uno de los otros dos patrones.

Hay un C-como continue acción que se mueven en la línea siguiente, ignorando todos los demás condición comprueba la línea actual?

Supongo que podría usar algo como ((NR > 1) && (!/^xyzzy:/)) {print} como la tercera regla, pero que parece bastante feo para mí.

Alternativamente, hay otra manera de hacer esto?

  • No soy experto en awk pero aquí es un muy lindo tutorial que he encontrado muy útil cuando yo comencé a aprender. Y, por supuesto, es un elaboración de la guía demasiado. Pero me gusta tutoriales sobre los libros. 🙂
InformationsquelleAutor paxdiablo | 2012-01-04

1 Comentario

  1. 33

    Utilice la palabra clave next como su acción

    Esta palabra clave a menudo es útil cuando se desea iterar sobre los 2 archivos; a veces es el mismo archivo que desea procesar dos veces.

    Usted verá la siguiente expresión:

    awk '
    FNR==NR {  
      < stuff that works on file 1 only >
      next
    }
    {
      < stuff that works on file 2 only >
    }' ./infile1 ./infile2
    • Ah, debería haber intentado la Perlish next antes de publicar. P. S. he intentado NR =< 2 y barfed así que estoy asumiendo que significaba NR <= 2 (y fijo en consecuencia). Saludos.
    • uy, a la derecha, que es lo que quiero decir.
    • next es uno de los al mejores características en awk. 🙂
    • quieres decir que debería haber intentado la Awkish next, ¿verdad? Awk llegó primero. 🙂
    • Puedo omitir pocas líneas? por ejemplo si estoy en la primera línea. Por hacer de ahora en adelante, voy a pasar a la segunda línea. Puedo omitir la línea 2 y pasar directamente a la línea 3?
    • getline; next; } ?

Dejar respuesta

Please enter your comment!
Please enter your name here