
Ich versuche, eine Datei nach einem Muster zu durchsuchen, und wenn es gefunden wird, möchte ich die Zeile und 10 weitere Zeilen des Ergebnisses sehen.
bisher habe ich
grep -n pattern file | cut -d: f1
jetzt bin ich nicht sicher, wie ich diese Ausgabe verwenden soll, um den Ausdruck mit der Logik wie dieser durchzuführen
sed -n result,(result+10)p file
wahrscheinlich wird es einige Probleme geben, wenn das Muster mehrere Zeilen umfasst.
Jede Hilfe ist willkommen
Antwort1
Wenn grep -A
es nicht funktioniert, versuchen Sie
awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>
sonst hat sed eine andere schmutzige Lösung
sed -n '/pattern/ {p;n;p;n;p;...}' <filename>
hier p-> drucken, n -> zur nächsten Zeile wechseln. Die Anzahl von p ist also die Anzahl der zu druckenden Zeilen
Aktualisieren:
Um es als Funktion zu verwenden, schreiben Sie es in eine test.sh
jobcheck(){
awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}
dann einfach
source test.sh
laufen,
jobcheck "pattern" "file"
Update: Gemäß Jonathan Lefflers Vorschlag sollte, wenn eine der nächsten 10 Zeilen das Muster enthält, mit der Zählung ab dieser Zeile begonnen werden, damit
pattern ->start printing from here to next 10 lines
blah
blah
pattern ->forget about the last 2 lines, start counting from here
blah
blah
Der aktualisierte Awk-Befehl sieht also so aus:
awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>
Ebenso wird auch Inside Jobcheck geändert. Prost:)
Antwort2
Verwenden von grep 2.10:
grep -A 10 "pattern" your_file
druckt 10 Zeilen nach dem Match
Von demgrep-manpage:
-Eine Zahl
--after-context=Nummer
Drucken Sie die Anzahl Zeilen des nachfolgenden Kontexts nach den übereinstimmenden Zeilen.
Verwendung von GNU awk 3.1.8:
awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file
Antwort3
Ich würde verwenden:
sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'
oder
sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'