awk + stampa le righe dalla prima riga fino alla parola corrispondente


8

Voglio stampare tutte le righe dal file fino alla parola della corrispondenza, per favore consigli su come farlo con awk

per esempio

Voglio stampare tutte le righe fino alla parola PPP

osserva che la prima riga potrebbe essere diversa da AAA (qualsiasi parola)

cat file.txt

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

quindi devo ottenerlo

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

altro esempio (vuoi stampare fino a KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

quindi ho bisogno di ottenere

 HG
 KJGFGHJ

Risposte:


12

Provare:

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

5
Lo stesso con sopra via sed:sed '/PPP/q' infile
Costas,

@Costas: Sì, l'OP vuole awk, quindi non do altri strumenti.
cuonglm,

Il 1 all'inizio è come un'istruzione completa "// {print $ 0}" che corrisponde sempre. awk non stampa senza di essa.
cidermole,

@cidermole: non esattamente. 1è come {print $0}. Si noti inoltre che //è un modello vuoto e il risultato non è specificato. E 'il lavoro in gawk, mawk, propria versione Brian Kernighan ma non in nawk, oawkdagli attrezzi cimelio petto.
cuonglm,

Grazie per la soluzione sed! Lo voglio solo fatto e non mi interessa lo strumento
Aaron McMillin

6

In alternativa, utilizzare un modello di intervallo corrispondente alla prima riga (NR uguale a 1) fino alla prima corrispondenza di "PPP" in una riga

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

se la riga deve corrispondere esattamente solo a 'PPP', utilizzare

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

Se si desidera fare lo stesso per ciascun file nell'elenco degli argomenti, utilizzare la variabile FNR che si reimposta su 1 per la prima riga di ciascun file elaborato

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

2

Come ha detto OP, la sua prima riga o parola di file può contenere qualsiasi parola (come PPPse stessa), quindi è necessario verificarla e scappare la prima riga dalla corrispondenza ed evitare awkdi uscire lì.

Quindi puoi provare questo:

File di input:

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

Comando:

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

Produzione:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.