split nach zeilen

belubaba

belubaba

Tripel-As
Hallo Zusammen,

ich habe eine Datei die ich alle 5 Zeilen splitten will.

Da aber unterschiedlich viele bytes in den 5 Zeilen enthalten sein können, kann ich split nicht verwenden.

Fällt hier jemand eine elegante Lösung ein? :)

b.
 
Schau Dir mal csplit an. Auf die Schnelle:

Code:
csplit file 5 '{99}'

Gruss, Phorus
 
Hallo
Spantaner ungetesteter Vorschlag:

Code:
perl -ple 'BEGIN { $i=0; } ((($. % 5)==0) or ($i == 0 ))?do{open STDOUT, ">$ARGV.$i";$i++;}:1;' testdatei
Probiers aus ;)

Verbesserungsvorschläge willkommen.:devil:

Gruß Wolfgang
@Phorus du bist natürlich kürzer , aber ich liebe es mit perl sowas zu machen. :D
PS Gleich kommen bestimmt wieder die Tools-Vorschläge. :D :D
 
Phorus schrieb:
Schau Dir mal csplit an. Auf die Schnelle:

Code:
csplit file 5 '{99}'

Gruss, Phorus

Hallo
Kleine Anmerkung zu deinem Vorschlag. ;)

Das funktioniert nur so, wenn die Gesamtzahl ein Vielfaches der zu splittenden Zeilenzahl (hier 5) ist!

Habe das csplit bisher garnicht gekannt, da ich sowas immer mit perl gemacht habe. :think:

Muss ich mir mal genauer ansehen, denn selbst mit -k werden die letzten Zeilen geschluckt.
Das bedeutet, eventuell vorher mit echo -e"\n" auf ein vielfaches bringen innerhalb einer While-Schleife, bis wc-l % 5 0 ergibt.
Dann wäre perl allerdings doch schneller.:)


Gruß Wolfgang
 
Wolfgang_1 schrieb:
Hallo
Spantaner ungetesteter Vorschlag:

Code:
perl -ple 'BEGIN { $i=0; } ((($. % 5)==0) or ($i == 0 ))?do{open STDOUT, ">$ARGV.$i";$i++;}:1;' testdatei
[/QUOTE]

Hallo Wolfgang,

nur Interessehalber: was macht die else-Bedingung "1" in der "?:"-Umgebung.

[QUOTE=Wolfgang_1]...
Muss ich mir mal genauer ansehen, denn selbst mit -k werden die letzten Zeilen geschluckt.
...
[/QUOTE]

Bei mir tritt das nicht auf, es kommt zwar 'ne Warnung, aber in dem letzten File sind die letzten Zeilen (<5) enthalten.

Gruss, Phorus
 
Zuletzt bearbeitet:
Hallo @Phorus

Phorus schrieb:
Hallo Wolfgang,

nur Interessehalber: was macht die else-Bedingung "1" in der "?:"-Umgebung.
Nichts, bzw sie gibt einfach true (unter perl 1=wahr) zurück.
;)
Da die Kurzschreibweise aber immer sowohl für false als auch true eine Anweisung braucht, gebe ich einfach wahr zurück.

Phorus schrieb:
Bei mir tritt das nicht auf, es kommt zwar 'ne Warnung, aber in dem letzten File sind die letzten Zeilen (<5) enthalten.

Gruss, Phorus
Bei mir schon.
Ich habe eine Dateimit 1249 Zeilen gesplittet, aber ohne -k brach das ab, und keine daei wurde erzeugt.
Mit -k fehlten die unvollständigen Zeilen.

wolle@Nietzsche:/home/wolle/temp$csplit --version
csplit (coreutils) 5.2.1
Geschrieben von Stuart Kemp und David MacKenzie.


Seltsam.
:think:

Gruß Wolfgang
 
Ich nutze hier FreeBSD 6.0. Ich sehe grade, dass ein

Code:
split -l 5 file

ohne Warnungen ebenfalls funktioniert.

Gruss, Phorus
 
Hallo @Phorus
Phorus schrieb:
Ich nutze hier FreeBSD 6.0. Ich sehe grade, dass ein

Code:
split -l 5 file

ohne Warnungen ebenfalls funktioniert.

Gruss, Phorus
split -l 5 file
laüft bei mir auch ;)

Kannst du mal die Programmversion von deinem verwendeten csplit rüberreichen?

Bei mir läuft Debian Sarge.

Gruß Wolfgang
 
Sorry, mit der Versionsnummer kann ich nicht dienen, da es weder einen Versions-Schalter gibt, noch etwas in der man-Seite steht.

Gruss, Phorus
 
Zuletzt bearbeitet:
War ja klar das meine Version des csplit die Option -l nicht unterstützt :)

Aber die Perl Lösung hat hervorragend funktioniert.

Vielen Dank für die schnelle Unterstützung, Ihr habt mir stundenlanges copy und pasten erspart ;)

b.
 
Phorus schrieb:
"-l" ist ein split-Schalter, nicht der von csplit.

Hmmm - das erklärt dann wohl auch warum der Schalter bei meinem csplit nicht funktioniert hat :rolleyes:

thx für den Hinweis
 

Ähnliche Themen

Perl Zeilen Auslesen(logdatei) und auswerten

sed - Bitte um Unterstützung

Verzeichnis mit 1200 Dateien auf Verweise in Textdateien checken

Kernel-Log, das "dmesg" ausgibt, löschen?

Falsche Ausgabe von $LINENO

Zurück
Oben