awk + Zeilen von der ersten Zeile bis zum Übereinstimmungswort drucken

8

Ich möchte alle Zeilen von der Datei bis zum Übereinstimmungswort drucken. Bitte geben Sie an, wie das mit awk geht

zum Beispiel

Ich möchte alle Zeilen bis zum Wort PPP drucken

Beachten Sie, dass die erste Zeile von AAA abweichen sollte (jedes Wort).

cat file.txt

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

Also muss ich das bekommen

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

anderes Beispiel (möchte bis KJGFGHJ drucken)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

also muss ich bekommen

 HG
 KJGFGHJ
Maihabunash
quelle

Antworten:

12

Versuchen:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
cuonglm
quelle
5
Gleiches gilt für oben über sed:sed '/PPP/q' infile
Costas
@Costas: Ja, das OP will awk, also gebe ich anderen keine Tools.
Cuonglm
Die 1 am Anfang ist wie eine vollständige Anweisung "// {print $ 0}", die immer übereinstimmt. awk druckt nicht ohne.
Cidermole
@ Cidermole: Nicht genau. 1ist wie {print $0}. Beachten Sie auch, dass //es sich um ein leeres Muster handelt und das Ergebnis nicht angegeben ist. Es ist Arbeit in gawk, mawk, Brian Kernighan eigene Version aber nicht in nawk, oawkvon Erbstück Tools Brust.
Cuonglm
Danke für die sed Lösung! Ich möchte nur, dass es fertig ist und mir ist das Werkzeug egal
Aaron McMillin
6

Alternativ können Sie ein Bereichsmuster verwenden, das mit der ersten Zeile (NR gleich 1) bis zur ersten Übereinstimmung von 'PPP' in einer Zeile übereinstimmt

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

Wenn die Linie genau mit 'PPP' übereinstimmen muss, verwenden Sie nur

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

Wenn Sie dasselbe für jede Datei in der Argumentliste tun möchten, verwenden Sie die FNR-Variable, die für die erste Zeile jeder verarbeiteten Datei auf 1 zurückgesetzt wird

awk 'FNR==1,/PPP/' file1 file2 ...
user531214
quelle
2

Wie OP sagte, kann seine erste Zeile oder sein erstes Wort der Datei ein beliebiges Wort enthalten (wie sich PPPselbst). Sie müssen dies also überprüfen und die erste Zeile vom Abgleich abhalten und vermeiden awk, dass sie dort beendet wird.

Dann können Sie dies versuchen:

Eingabedatei:

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

Befehl:

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

Ausgabe:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
αғsнιη
quelle