Wie kann ich mit dem Linux-Befehl “ cat ” nur bestimmte Zeilen nach der Nummer
On Februar 15, 2021 by admin Wenn ich cat -n text.txt
verwende, um die Zeilen automatisch zu nummerieren, wie verwende ich dann den Befehl, um nur bestimmte nummerierte Zeilen anzuzeigen.
Kommentare
- Was meinst du mit " zeige nur bestimmte nummerierte Zeilen ", Können Sie eine erwartete Ausgabe platzieren?
- Es gibt wahrscheinlich eine Million Möglichkeiten, dies zu tun. '
tail
+head
kann dies ebenso tun wieawk
Antwort
Verwenden Sie sed
Verwendung
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
So drucken Sie eine Zeile (5)
$ sed -n 5p file Line 5
So drucken Sie mehrere Zeilen (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Zum Drucken eines bestimmten Bereichs (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Zum Drucken des Bereichs mit einer anderen spezifischen Zeile (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Antwort
Eine Möglichkeit ist die Verwendung von sed
:
cat -n text.txt | sed "11d"
wobei 11 die Nummer der Zeile ist, die entfernt werden soll.
Oder bis Entfernen Sie alle außer 11:
cat -n text.txt | sed "11!d"
Bereiche sind ebenfalls möglich:
cat -n text.txt | sed "9,12!d"
Und cat -n
wird nicht einmal benötigt:
sed "9,12!d" text.txt
Antwort
Sie kann awk direkt nach oben verwenden.
awk "NR==1" file.txt
Ersetzen von „1“ durch die gewünschte Zeilennummer.
Kommentare
- Dies ist mit einer Million Meilen die beste Antwort hier und verdient viel mehr Liebe als sie hat.
Antwort
Abhängig von den Zielen, die ich mag, gibt head oder grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
die Zeilen 41 bis 50 zurück.
oder
cat /var/log/syslog -n | grep " 50" -b10 -a10
zeigt die Zeilen 40 bis 60 an. Das Problem bei der grep-Methode ist, dass Sie müssen das Konto zum Auffüllen der Zeilennummern verwenden (beachten Sie das Leerzeichen)
Beide sind sehr praktisch zum Parsen von Protokolldateien.
Kommentare
- Keines der beiden Beispiele benötigt
cat
obwohl - gut ja .. . aber …. aber … ….. Es gibt bessere Möglichkeiten. Die Frage zur Verwendung von cat wurde gestellt, also habe ich sie verwendet.
-
cat
' kann nicht das tun, was das OP tut will
Antwort
Wie andere Ihnen gezeigt haben, muss . Andere Programme erledigen das für Sie. Wenn Sie jedoch die Ausgabe von cat -n
wirklich analysieren und nur bestimmte Zeilen anzeigen müssen (z. B. 4-8, 12 und 42), können Sie Folgendes tun:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42" 4 Line 4 5 Line 5 6 Line 6 7 Line 7 8 Line 8 12 Line 12 42 Line 42
In awk
ist $1
das erste Feld, daher wird dieser Befehl gedruckt alle Zeilen, deren erste Felder i) zwischen 4 und 8 (einschließlich) oder ii) 12 oder iii) 42 liegen.
Wenn Sie auch das durch cat -n
Um die ursprünglichen Zeilen aus der Datei abzurufen, haben Sie folgende Möglichkeiten:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}" Line 4 Line 5 Line 6 Line 7 Line 8 Line 12 Line 42
Kommentare
- Könnten Sie nicht '
NR
anstelle von$1
verwenden? - @SolomonUcko sicher, aber da ich demonstrierte, wie dies mit
cat -n
speziell gemacht wird, dachte ich, ich würde die Ausgabe verwenden, diecat -n
bereitstellt .
Antwort
Mit sed können Sie nur eine Zahl und l anzeigen oop dies mit einer for-Schleife:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
Schreibe einen Kommentar