Sie können auch einen beliebigen Stream an headfolgende someCmd | head -10
Stuart Nelson
1
Head druckt standardmäßig die ersten 10 Zeilen auf die Standardausgabe, daher gilt dies für 10 Zeilenhead log.txt | grep <whatever>
Zlemini
5
Gibt es eine Möglichkeit, dies zu tun, wenn Sie die -lOption von grep verwenden ? Ich möchte alle Dateien auflisten, deren erste 5 Zeichen sind RIFFD.
James M. Lay
49
Für Leute, die dies bei Google finden, musste ich die ersten nZeilen mehrerer Dateien durchsuchen , aber nur die passenden Dateinamen drucken. ich benutzte
Der FNR..nextfileVorgang beendet die Verarbeitung einer Datei, sobald 10 Zeilen angezeigt wurden. Der //..{}druckt den Dateinamen und fährt fort, wenn die erste Übereinstimmung in einer bestimmten Datei angezeigt wird. Verwenden Sie, um die Dateinamen zugunsten anderer Programme zu zitieren
Ich war einer von denen, die das bei Google gefunden haben. Vielen Dank!
Floris
Für mich druckte dieser Code den vollständigen Pfad der Datei aus. Welches ist genau das, was ich brauchte. Auch FNR=1wird nur 1. Zeile suchen. Vielen Dank!
Brian W
2
Um dies rekursiv über ein Verzeichnis zu tun:find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
OrangeDog
1
Danke @OrangeDog. Eine leichte Korrektur: sollte sein-type f
David Siegal
26
Oder verwenden Sie awkfür einen einzelnen Prozess ohne |:
awk '/your_regexp/ && NR < 11' INPUTFILE
Wenn in jeder Zeile your_regexpÜbereinstimmungen vorliegen und die Anzahl der Datensätze (Zeilen) weniger als 11 beträgt, wird die Standardaktion ausgeführt (die die Eingabezeile druckt).
Oder verwenden Sie sed:
sed -n '/your_regexp/p;10q' INPUTFILE
Überprüft Ihren regulären Ausdruck und druckt die Zeile ( -nbedeutet, dass die Eingabe nicht gedruckt wird, was ansonsten die Standardeinstellung ist) und wird direkt nach der 10. Zeile beendet.
@potong du hast recht, korrigiert. @srikanthradix, obwohl es schneller sein kann, sucht Ihre Lösung nicht nach regulären Ausdrücken, sondern nur nach festen Zeichenfolgen. awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfiletut.
Zsolt Botykai
4
Plus der Stil ist nicht awkish. 2xifsund 1xelsein einem Befehl, der keine Aktionsanweisung benötigt, würde aho machen. weinberger und kernighan weinen ...
jaypal singh
1
Ich denke, anstelle von NR wäre es besser, FNR zu verwenden, denn wenn Sie awk mit mehreren Dateien verwenden, beginnt FNR für jede Datei bei 0.
Vladyslav Savchenko
9
Sie haben einige Optionen mit Programmen zusammen mit grep. Das einfachste ist meiner Meinung nach zu verwenden head:
head -n10 filename | grep ...
headgibt die ersten 10 Zeilen aus (mit der -nOption), und dann können Sie diese Ausgabe an weiterleiten grep.
Ich war gar nicht bewusst, alle Lösungen hier mit headverwendet haben -n 10(mich eingeschlossen ) nicht , dass die Realisierung headvon Standard - Displays nur 10 Zeilen . :)
Nein, dies gibt Ihnen die ersten 6 Vorkommen von "Zeichenfolge" in der gesamten cov.txt-Datei
Franzisk
2
Eine Erweiterung auf Joachim Isaksson Antwort: Oft muss ich etwas aus der Mitte einer langen Datei, zB Linien 5001-5020, in diesem Fall können Sie kombinieren headmit tail:
head -5020 file.txt | tail -20| grep x
Dies erhält die ersten 5020 Zeilen, zeigt dann nur die letzten 20 davon an und leitet dann alles an grep weiter.
(Bearbeitet: Zaunpfostenfehler in meinen Beispielnummern, Pipe zu Grep hinzugefügt)
Dies dient dazu, das Muster und die nächsten 10 Zeilen nach dem Muster zu erfassen. Dies würde nur für ein bekanntes Muster gut funktionieren, wenn Sie kein bekanntes Muster haben, verwenden Sie die "Kopf" -Vorschläge.
Obwohl es richtig sein könnte. Fügen Sie eine weitere Beschreibung der Frage hinzu, um die Antwort umfassender zu gestalten.
Pramod S. Nikam
3
Dies beantwortet eine völlig andere Frage und ist in diesem Zusammenhang nicht sinnvoll.
Pre101
-1
Ich hatte ein ähnliches Problem und alle oben genannten Probleme lösen es nicht vollständig. Ich bin auch daran interessiert, den Dateinamen mit den passenden Zeilen zu erhalten. Meine Lösung:
head
folgendesomeCmd | head -10
head log.txt | grep <whatever>
-l
Option von grep verwenden ? Ich möchte alle Dateien auflisten, deren erste 5 Zeichen sindRIFFD
.Für Leute, die dies bei Google finden, musste ich die ersten
n
Zeilen mehrerer Dateien durchsuchen , aber nur die passenden Dateinamen drucken. ich benutzteDer
FNR..nextfile
Vorgang beendet die Verarbeitung einer Datei, sobald 10 Zeilen angezeigt wurden. Der//..{}
druckt den Dateinamen und fährt fort, wenn die erste Übereinstimmung in einer bestimmten Datei angezeigt wird. Verwenden Sie, um die Dateinamen zugunsten anderer Programme zu zitierenquelle
FNR=1
wird nur 1. Zeile suchen. Vielen Dank!find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
-type f
Oder verwenden Sie
awk
für einen einzelnen Prozess ohne|
:Wenn in jeder Zeile
your_regexp
Übereinstimmungen vorliegen und die Anzahl der Datensätze (Zeilen) weniger als 11 beträgt, wird die Standardaktion ausgeführt (die die Eingabezeile druckt).Oder verwenden Sie
sed
:Überprüft Ihren regulären Ausdruck und druckt die Zeile (
-n
bedeutet, dass die Eingabe nicht gedruckt wird, was ansonsten die Standardeinstellung ist) und wird direkt nach der 10. Zeile beendet.quelle
awk '{ if ( NR <= 10 ) { if(index($0,"ab") > 0) { print $0; } } else { exit; } }' textfile
-- schneller.awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfile
tut.awkish
.2xifs
und1xelse
in einem Befehl, der keine Aktionsanweisung benötigt, würde aho machen. weinberger und kernighan weinen ...Sie haben einige Optionen mit Programmen zusammen mit
grep
. Das einfachste ist meiner Meinung nach zu verwendenhead
:head
gibt die ersten 10 Zeilen aus (mit der-n
Option), und dann können Sie diese Ausgabe an weiterleitengrep
.quelle
head
verwendet haben-n 10
(mich eingeschlossen ) nicht , dass die Realisierunghead
von Standard - Displays nur 10 Zeilen . :)quelle
Sie können die folgende Zeile verwenden:
quelle
Die Ausgabe von
head -10 file
kann weitergeleitet werden,grep
um dies zu erreichen:Verwenden von Perl:
quelle
-A 2
: Drucken Sie zwei Zeilen vor dem Muster.-B 2
: Drucken Sie zwei Zeilen nach dem Muster.quelle
-C 2
werde ich das Gleiche tun wie-A 2 -B 2
Dies durchsucht nur die ersten 6 Zeilen nach
string
quelle
Eine Erweiterung auf Joachim Isaksson Antwort: Oft muss ich etwas aus der Mitte einer langen Datei, zB Linien 5001-5020, in diesem Fall können Sie kombinieren
head
mittail
:Dies erhält die ersten 5020 Zeilen, zeigt dann nur die letzten 20 davon an und leitet dann alles an grep weiter.
(Bearbeitet: Zaunpfostenfehler in meinen Beispielnummern, Pipe zu Grep hinzugefügt)
quelle
grep -A 10 <Muster>
Dies dient dazu, das Muster und die nächsten 10 Zeilen nach dem Muster zu erfassen. Dies würde nur für ein bekanntes Muster gut funktionieren, wenn Sie kein bekanntes Muster haben, verwenden Sie die "Kopf" -Vorschläge.
quelle
Ich hatte ein ähnliches Problem und alle oben genannten Probleme lösen es nicht vollständig. Ich bin auch daran interessiert, den Dateinamen mit den passenden Zeilen zu erhalten. Meine Lösung:
NB: Das Muster in meinem Fall stimmt immer mit der ersten Zeile überein.
quelle