Bash-Tool, um die n-te Zeile aus einer Datei zu erhalten

Gibt es eine "kanonische" Möglichkeit, das zu tun? Ich habe head -n | tail -1 benutzt, was auch funktioniert, aber ich habe mich gefragt, ob es ein Bash-Tool gibt, das speziell eine Zeile (oder einen Bereich von Zeilen) aus einer Datei extrahiert.

Mit "kanonisch" meine ich ein Programm, dessen Hauptfunktion darin besteht, dies zu tun.

Lösung

head und pipe mit tail wird bei einer großen Datei langsam sein. Ich würde sed wie folgt vorschlagen:

sed 'NUMq;d' file

Wobei NUM die Nummer der Zeile ist, die Sie ausdrucken wollen; also zum Beispiel sed '10q;d' file, um die 10te Zeile von file zu drucken.

Erläuterung:

NUMq wird sofort beendet, wenn die Zeilennummer NUM ist.

d löscht die Zeile, anstatt sie zu drucken; dies wird bei der letzten Zeile verhindert, weil q den Rest des Skripts beim Beenden überspringt.

Wenn Sie NUM in einer Variablen haben, sollten Sie doppelte Anführungszeichen anstelle von einfachen verwenden:

sed "${NUM}q;d" file
Kommentare (26)
sed -n '2p' < file.txt

wird 2. Zeile drucken

sed -n '2011p' < file.txt
  1. Zeile
sed -n '10,33p' < file.txt

Zeile 10 bis Zeile 33

sed -n '1p;3p' < file.txt
  1. und 3. Zeile

und so weiter...

Für das Hinzufügen von Zeilen mit sed, können Sie dies überprüfen:

https://stackoverflow.com/q/15555781/#16246806

Kommentare (8)

Sie können dafür auch Perl verwenden:

perl -wnl -e '$.== NUM && print && exit;' some.file
Kommentare (0)