¿Cómo ejecutar awk para algunas líneas?

Quiero extraer algunas líneas con awk. ¿Es posible realizar la siguiente tarea:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

¿Cómo puedo mostrar los detalles de los números de línea 122 a 129?

Comentarios

  • Si tuviera que hacer esto en un bucle, ' sugeriría el sed, ya que sed es mucho más pequeño (y se carga más rápido) que awk.

Respuesta

No ha entendido cómo funciona awk. El «programa» especificado siempre se ejecuta una vez por cada línea (o «registro» en el lenguaje awk) de entrada, no es necesario FOR o cualquier construcción similar. Solo usa:

método detallado

ls -l | awk "NR>=122 && NR<=129 { print }" 

método más compacto

ls -l | awk "NR==122,NR==129" 

Este da un rango para NR, que es el «Registro numérico», normalmente este es la línea actual que awk está procesando.

Comentarios

  • En realidad, el El código para dicha tarea suele ser ls -l | awk 'NR==122,NR==129'.
  • ¿Cuál es el comando para obtener las últimas 100 líneas del archivo usando awk
  • @ShihabudheenKM Puede echar un vistazo a esto: stackoverflow.com/questions/12546919/…

Respuesta

Un método alternativo más sería usar sed :

Pero si, como sugiere su pregunta, es importante usar awk para esto, vaya con el comentario de manatwork sobre la respuesta de Zrajm. Como indica la documentación de awk:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Entonces, si lo desea, también puede crear condiciones más avanzadas. Por ejemplo:

ls -l | awk "NR==122,/foobar/" 

Esto comenzaría la salida en la línea 122 y continuaría hasta que una línea contenga el palabra «foobar».

Si nos dice el caso de uso real , es posible que podamos ayudarlo con respuestas que brinden una mejor solución. Me preocupa que esto suene a un problema XY .

Respuesta

Otra forma de haciendo esto (aunque prefiero el método awk) usando coreutils:

ls -l | tail -n +122 | head -n 8 

Responder

 awk "NR == 122,NR == 129{print $0}" file 

Aquí podemos extraer las líneas 122 a 129 del archivo.

$0 se utiliza para imprimir todos los datos del archivo entre 122 y 129 líneas.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *