Ich habe eine Datei mit einigen Zeilen nicht. Ich möchte geteilte Datei in n no.of Dateien mit bestimmten Namen. Es spielt keine Rolle, wie viele Zeilen in jeder Datei vorhanden sind. Ich möchte nur eine bestimmte Anzahl von Dateien (sagen wir 5). Hier ist das Problem, dass sich die Anzahl der Zeilen in der ursprünglichen Datei ändert. Also muss ich keine Zeilen berechnen und dann die Dateien in 5 Teile aufteilen. Wenn möglich, müssen wir sie in verschiedene Verzeichnisse schicken.Wie spalte ich eine Datei in n keine Teile
Antwort
Unter Linux gibt es ein split
Befehl,
split --lines=1m /path/to/large/file /path/to/output/file/prefix
Ausgabe mit fester Größe Stücke von INPUT zu PREFIXaa, PREFIXab, ...; Die Standardgröße beträgt 1000 Zeilen und der Standardwert PREFIX ist 'x'. Ohne INPUT oder wenn INPUT - ist, lesen Sie den Standard-Eingang.
...
-l, --lines = NUMBER put NUMBER Zeilen pro Ausgabedatei
...
Sie würden die tatsächliche Größe der Splits haben berechnen vorher aber.
Dies teilt Zeilen oder Bytes? –
Hier ändert sich auch die Größe der Datei täglich. Also brauche ich allgemeine Antwort, wo wir weder Größe noch Anzahl der Zeilen verwenden sollten. –
Ich muss ein Shell-Skript dafür schreiben. Kann mir jemand dabei helfen? –
Angenommen, Sie verarbeiten eine Textdatei, dann wc -l
, um die Gesamtzahl der Zeilen zu bestimmen, und split -l
, um in eine bestimmte Anzahl von Zeilen aufzuteilen (insgesamt/5 in Ihrem Fall). Dies funktioniert unter UNIX/Mac und Windows (wenn Sie cygwin installiert haben)
Ich kann mir ein paar Möglichkeiten vorstellen, es zu tun. Was Sie verwenden würden, hängt sehr von den Daten ab.
Linien werden Länge festgelegt: die Größe der Datei finden, indem es Verzeichniseintrag und dividieren durch die Leitungslänge zu lesen, die Anzahl der Linien zu erhalten. Verwenden Sie diese Option, um die Anzahl der Zeilen pro Datei festzulegen.
Die Dateien müssen nur ungefähr die gleiche Anzahl von Zeilen haben. Lesen Sie erneut die Dateigröße aus dem Verzeichniseintrag. Lesen Sie die ersten N Zeilen (N sollte klein sein, aber einen vernünftigen Bruchteil der Datei), um eine durchschnittliche Zeilenlänge zu berechnen. Berechnen Sie die ungefähre Anzahl der Zeilen basierend auf der Dateigröße und der vorhergesagten durchschnittlichen Zeilenlänge. Dies setzt voraus, dass die Zeilenlänge einer Normalverteilung folgt. Wenn nicht, passen Sie Ihre Methode so an, dass Sie Zeilen zufällig abtasten (mit seek() oder etwas Ähnlichem). Spulen Sie die Datei nach dem Durchschnitt zurück, und teilen Sie sie dann auf der Grundlage der vorhergesagten Zeilenlänge.
Die Datei zweimal lesen. Beim ersten Mal zählen Sie die Anzahl der Zeilen. Das zweite Mal die Datei in die erforderlichen Teile aufteilen.
EDIT: ein Shell-Skript verwendet (nach Ihren Kommentaren), die randomisierte Version # 2 wäre schwierig, wenn Sie ein kleines Programm geschrieben, dass für Sie tun. Sie sollten ls -l
verwenden können, um die Dateigröße zu erhalten, wc -l
, um die genaue Anzahl der Zeilen zu zählen, und head -nNNN | wc -c
, um die durchschnittliche Zeilenlänge zu berechnen.
In bash können Sie den Befehl split
verwenden, um ihn basierend auf der Anzahl der gewünschten Zeilen zu teilen. Sie können den Befehl wc
verwenden, um herauszufinden, wie viele Zeilen gewünscht sind. Hier ist wc
kombiniert mit split
in einer Zeile.
Zum Beispiel onepiece.log
in 5 Teile aufzuspalten
split -l$((`wc -l < onepiece.log`/5)) onepiece.log onepiece.split.log -da 4
Dies wird Dateien erstellen wie onepiece.split.log0000
...
Hinweis: bash Division abrundet, so dass, wenn es einen Rest gibt es sei eine 6. Teildatei.
** split -da 4 -l $ (('wc -l
ausgezeichnete Verbesserung, @grasshopper – Flowpoke
diese Antwort ist prägnanter als die beiden [höher upvoted Fragen] (http://stackoverflow.com/questions/7764755/unix-how-to-split- a-file-in-gleich-teile-ohne-brechen-einzelne-linien) auf stackoverflow und askubuntu. –
- 1. Split RDD in n Teile in pySpark
- 2. Python [float (n) für n in line.split()] über eine Datei, die nur eine Spalte enthält
- 3. Wie rende ich * Teile * einer Svg-Datei?
- 4. Geteiltes C-Array in n gleiche Teile
- 5. Wie sortiere ich eine durch Tabs getrennte Datei in der n-ten Spalte mit cygwin sort?
- 6. Wie teile ich eine Datei zwischen Widget, Service und App?
- 7. Wie spalte ich eine Spalte?
- 8. eine heruntergeladene Datei in Android N
- 9. Wie teile ich eine Zeichenfolge von einer CSV-Datei in ein Pariqular-Format in PHP?
- 10. Wie lösche ich Teile einer Datei in Python?
- 11. Wie teile ich eine Argument-String Bash-Stil in Ruby?
- 12. Wie spalte ich eine MP3-Datei in kleinere Dateien?
- 13. Java: Wie lies ich eine Datei zeilenweise durch ignorieren "\ n"
- 14. Kann ich eine n-te CSS-Spalte auswählen?
- 15. Wie teile ich ActiveRecord mit, keine Steuerzeichen zu loggen?
- 16. Wie "\ n" in der Datei
- 17. Wie teile ich eine Webseite in verschiedene Abschnitte?
- 18. Ich kann keine große Zeichenfolge in eine Datei schreiben
- 19. Wie n-ten Spalte mit regexp Begrenzer
- 20. Wie teile ich ein Datenframe Stück für Stück in Stücke von n, wende eine Funktion an und kombiniere?
- 21. Spalte eine Spalte von jeder in "n" Spalten mit je einem Zeichen
- 22. Teile Bild, aber keine Dateierweiterung
- 23. Wie teile ich eine Zeile in tex-Datei in Lesen/Schreiben?
- 24. Wie eine Spalte aus einer Datei in einer anderen Datei
- 25. MEF findet keine Teile in anderen Baugruppen
- 26. Wie teile ich Text in einer Kendo PanelBar?
- 27. Mehrere Teile einer Datei in Cordova zusammenführen
- 28. Wie teile ich URL-Parameter in eine URL-Route?
- 29. Wie teile ich einen String in eine Liste?
- 30. Wie teile ich eine Zeichenfolge in Python zuverlässig?
Verwenden von was? Ein Werkzeug, eine Programmiersprache, ein Skript ...? –
Windows, Linux? Welche Sprache (n) haben Sie verfügbar? –
Ich muss es in UNIX tun –