awk + imprime líneas desde la primera línea hasta la palabra coincidente


8

Quiero imprimir todas las líneas del archivo hasta la palabra coincidente, por favor, aconsejen cómo hacerlo con awk

por ejemplo

Quiero imprimir todas las líneas hasta la palabra PPP

comente que la primera línea podría ser diferente de AAA (cualquier palabra)

cat file.txt

AAA   ( the first line/word chuld be any word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&

así que necesito conseguir esto

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

otro ejemplo (desea imprimir hasta KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

así que necesito

 HG
 KJGFGHJ

Respuestas:


12

Tratar:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

55
Lo mismo con lo anterior vía sed:sed '/PPP/q' infile
Costas

@ Costas: Sí, el OP quiere awk, así que no doy otras herramientas.
Cuonglm

El 1 al principio es como una declaración completa "// {print $ 0}" que siempre coincide. awk no imprime sin él.
cidermole

@cidermole: No exactamente. 1es como {print $0}. También tenga en cuenta que //es un patrón vacío y el resultado no está especificado. Es un trabajo en gawk, la mawkpropia versión de Brian Kernighan, pero no en nawk, oawkdel cofre de herramientas de la herencia.
Cuonglm

Gracias por la solución sed! Solo quiero que se haga y no me importa la herramienta
Aaron McMillin

6

Alternativamente, use un patrón de rango que coincida con la primera línea (NR igual a 1) hasta la primera coincidencia de 'PPP' en una línea

awk 'NR==1,/PPP/' file

si la línea debe coincidir exactamente con 'PPP' solo use

awk 'NR==1,/^PPP$/' file

Si desea hacer lo mismo para cada archivo en la lista de argumentos, use la variable FNR que se restablece a 1 para la primera línea de cada archivo procesado

awk 'FNR==1,/PPP/' file1 file2 ...

2

Como OP dijo, su primera línea o palabra de archivo puede contener cualquier palabra (como PPPsí misma), por lo que debe verificar eso y evitar que la primera línea coincida y evitar awkque salga allí.

Entonces puedes probar esto:

Fichero de entrada:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%

Mando:

awk '1;/PPP/{if (NR>1) exit}' file

Salida:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.