Teilen Sie die Datei in mehrere kleine Dateien auf, die durch das Zeilenumbruchsymbol voneinander getrennt sind

13

Gibt es ein Dienstprogramm, das Dateien nach Zeilenumbrüchen aufteilt? zB wenn eine Datei die folgenden Zeilen enthält,

aa
bbb
cccc

Wenn ich es in 3 Dateien aufteilen möchte, wäre die gewünschte Ausgabe:

aa, bbbUnd cccc(in 3 verschiedenen Dateien)

Ich habe den splitBefehl bereits geprüft , er schneidet nur Dateien nach Dateigröße, nicht was ich will.

Wenn ich selbst kein Hilfsprogramm geschrieben habe, gibt es ein Standardwerkzeug, das ich verwenden kann?

Gänseblümchen
quelle
was soll der Dateiname sein?
Rahul Patil
Möchten Sie eine Datei für jede Zeile erstellen? Ich habe recht ?
Rahul Patil
Sequentielle Namen: unix.stackexchange.com/questions/164903/…
Ciro Santilli Am

Antworten:

14

Wenn mir nichts fehlt, splitwird bei Verwendung von -lswitch die Zeile aufgeteilt :

   -l, --lines=NUMBER
          put NUMBER lines per output file

so

split -l 1 inputfile

sollte tun, was du willst.

don_crissti
quelle
4
awk '{print > $0".txt" }'  inputfile

würde eine Datei pro eindeutiger Zeile in der Eingabedatei erstellen, die nach dem Inhalt dieser Zeilen benannt ist (mit einer .txtErweiterung). Beachten Sie jedoch, dass einige awkImplementierungen fehlschlagen , wenn das Limit für gleichzeitig geöffnete Dateien erreicht ist .

Oder

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

Ausgabe-Dateien nummeriert zu haben.

Rahul Patil
quelle
Möglicherweise möchten Sie die Ausgabedatei nach dem Schreiben schließen (), da sonst bei den meisten awk-Implementierungen die maximale Anzahl offener Dateien überschritten wird.
Stéphane Chazelas
Weißt du das nicht? Kannst du das für mich tun? danke ..
Rahul Patil
3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
Uwe
quelle