676 Stimmen

Wie kann ich einen bestimmten Bereich von Zeilen aus einer Textdatei unter Unix extrahieren?

Ich habe einen SQL-Dump mit ~23000 Zeilen, der Daten aus mehreren Datenbanken enthält. Ich muss einen bestimmten Abschnitt dieser Datei (d. h. die Daten für eine einzelne Datenbank) extrahieren und in eine neue Datei einfügen. Ich kenne sowohl die Anfangs- als auch die Endzeilennummer der gewünschten Daten.

Kennt jemand einen Unix-Befehl (oder eine Reihe von Befehlen), um alle Zeilen aus einer Datei zwischen z.B. Zeile 16224 und 16482 zu extrahieren und sie dann in eine neue Datei umzuleiten?

3voto

Robert Massaioli Punkte 13111

Ich habe ein Haskell-Programm namens Splitter die genau das tut: eine Lesen Sie meinen Blogbeitrag zur Veröffentlichung .

Sie können das Programm wie folgt verwenden:

$ cat somefile | splitter 16224-16482

Und das ist alles, was es dazu zu sagen gibt. Sie benötigen Haskell, um es zu installieren. Einfach:

$ cabal install splitter

Und Sie sind fertig. Ich hoffe, dass Sie dieses Programm nützlich finden.

3voto

jan.vdbergh Punkte 2069

Schnell und schmutzig:

head -16428 < file.in | tail -259 > file.out

Wahrscheinlich ist das nicht der beste Weg, aber es sollte funktionieren.

ÜBRIGENS: 259 = 16482-16224+1.

2voto

Paddy3118 Punkte 4524

Ich würde verwenden:

awk 'FNR >= 16224 && FNR <= 16482' my_file > extracted.txt

FNR enthält die Satznummer (Zeilennummer) der Zeile, die aus der Datei gelesen wird.

2voto

Benjamin W. Punkte 37771

Verwendung von ed:

ed -s infile <<<'16224,16482p'

-s unterdrückt die Diagnoseausgabe; die eigentlichen Befehle stehen in einer here-Zeichenkette. Im Einzelnen, 16224,16482p läuft die p (Drucken) auf den gewünschten Zeilenadressbereich.

2voto

sammyo Punkte 1023

Ich wollte gerade den Kopf-Schwanz-Trick posten, aber eigentlich würde ich wohl einfach Emacs anwerfen ;-)

  1. esc - x goto-line ret 16224
  2. markieren ( ctrl - space )
  3. esc - x goto-line ret 16482
  4. esc - w

die neue Ausgabedatei öffnen, ctl-y speichern

Ich will sehen, was los ist.

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