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
maihabunash
fuente

Respuestas:

12

Tratar:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
Cuonglm
fuente
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 ...
usuario531214
fuente
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
αғsнιη
fuente