808 Stimmen

Drucken einer Datei, wobei die ersten X Zeilen übersprungen werden, in Bash

Ich habe eine sehr lange Datei, die ich ausdrucken möchte, wobei ich z. B. die ersten 1.000.000 Zeilen überspringen möchte.

Ich habe in der Manpage von cat nachgeschaut, aber ich habe keine Option gefunden, die dies ermöglicht. Ich bin auf der Suche nach einem Befehl oder einem einfachen Bash-Programm, um dies zu tun.

26voto

maerics Punkte 141984

Verwenden Sie die sed delete commande mit einer Bereichsadresse . Zum Beispiel:

sed 1,100d file.txt # Print file.txt omitting lines 1-100.

Wenn Sie nur einen bekannten Bereich ausdrucken möchten, können Sie alternativ den Befehl print mit der Option -n Flagge:

sed -n 201,300p file.txt # Print lines 201-300 from file.txt

Diese Lösung sollte auf allen Unix-Systemen zuverlässig funktionieren, unabhängig vom Vorhandensein von GNU-Utilities.

2 Stimmen

Die am leichtesten zu verwendende Antwort sowohl für Cli als auch für Scripting.

24voto

Verwendung:

sed -n '1d;p'

Mit diesem Befehl wird die erste Zeile gelöscht und der Rest gedruckt.

0 Stimmen

Besser als tail imo, da wir die Anzahl der zu beschneidenden Zeilen nicht kennen müssen. wir entfernen einfach die 1. Zeile und das ist alles

6 Stimmen

@Tom Sie brauchen die Zahl nicht zu kennen, um die erste Zeile zu überspringen, verwenden Sie tail +2

0 Stimmen

In der Tat ein guter Punkt

17voto

Kadir YILDIZ Punkte 161

Wenn Sie die ersten 10 Zeilen sehen möchten, können Sie sed wie folgt verwenden:

sed -n '1,10 p' myFile.txt

Wenn Sie Zeilen von 20 bis 30 sehen möchten, können Sie auch die Option verwenden:

sed -n '20,30 p' myFile.txt

15voto

Dana the Sane Punkte 14222

Sie können dies mit den Befehlen head und tail tun:

head -n <num> | tail -n <lines to print>

wobei num 1e6 + die Anzahl der zu druckenden Zeilen ist.

3 Stimmen

Das ist nicht die effizienteste Antwort, da Sie die Datei mit "wc -l" bearbeiten müssten, um die Zeilenzahl zu ermitteln, gefolgt von einer Addition, um die Million hinzuzufügen :-). Sie können es einfach mit "tail" machen.

0 Stimmen

Ich bin mir nicht sicher, aber ich dachte, dass 1e6 zum Zeitpunkt des Anrufs bekannt sein würde. Das Rückwärtszählen ist allerdings nicht das schnellste.

14voto

tuomassalo Punkte 8077

Nur um einen Vorschlag zu machen sed Alternative :) Um die ersten eine Million Zeilen zu überspringen, versuchen Sie |sed '1,1000000d' .

Beispiel:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005

2 Stimmen

@Marlon, tut mir leid, aber das ist falsch. Das funktioniert nur für 1d. Wenn Sie es z. B. für 2d verwenden, löschen Sie nur Zeile 2. Der Zeilenbereich wird nicht gelöscht.

0 Stimmen

@A-B-B sorry, wollte sagen, dass dies bei weitem die einfachste Lösung ist, weshalb ich +1 es nicht versucht, den Autor zu korrigieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X