awk + imprime linhas da primeira linha até a palavra correspondente

6

Eu quero imprimir todas as linhas do arquivo até a palavra correspondente por favor, conselhos como fazer isso com o awk

por exemplo

Eu quero imprimir todas as linhas até que a palavra PPP

observe que a primeira linha pode ser diferente de AAA (qualquer palavra)

cat file.txt

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

então eu preciso pegar isso

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

outro exemplo (queira imprimir até KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

então eu preciso pegar

 HG
 KJGFGHJ
    
por maihabunash 30.11.2014 / 12:18

3 respostas

11

Tente:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
    
por 30.11.2014 / 12:21
5

Como alternativa, use um padrão de intervalo correspondente à primeira linha (NR igual a 1) até a primeira correspondência de 'PPP' em uma linha

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

se a linha deve corresponder exatamente a 'PPP', use somente

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

Se você quiser fazer o mesmo para cada arquivo na lista de argumentos, use a variável FNR que é redefinida para 1 na primeira linha de cada arquivo processado

awk 'FNR==1,/PPP/' file1 file2 ...
    
por 30.11.2014 / 15:00
1

Como o OP disse que sua primeira linha ou palavra de arquivo pode conter qualquer palavra (como PPP ), então você precisa verificar isso e evitar que a primeira linha corresponda e evite que o awk saia daqui. / p>

Você pode tentar isso:

Arquivo de entrada:

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

Comando:

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

Saída:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
    
por 30.11.2014 / 18:12

Tags