Forum: PC Hard- und Software große Textdateien bearbeiten


von Flodder (Gast)


Lesenswert?

Hallo

Ich habe etwa 3.000 einzelne Textdateien, jede davon ca. 5MB groß. Die 
Textdateien enthalten jeweils eine Vielzahl von etwa 50Zeichen langen 
Zeilen

Ich möchte sie nun:
- alle zu einer großen Datei zusammenfügen
- Zeilenweise sortieren
- gleiche Zeilen entfernen


Wie stelle ich sowas an? Ich habe bereits Ultraedit veruscht (bringt 
Fehlermeldung seek error) und EmEditor (sortiert bis die internen 16GB 
Ram voll sind und kommt dann nicht mehr oder kaum noch weiter)

von test (Gast)


Lesenswert?

Per Python Script einlesen und in ne Datenbank packen!?

von Lord Hesketh-Fortescue aus North Cothelstone Hall (Gast)


Lesenswert?

cat file1 file2 ... fileN | sort | uniq

von Dirk B. (dirkb2)


Lesenswert?

Unixtools gibt es auch für Windows.

von g457 (Gast)


Lesenswert?

> [..] 3.000 einzelne Textdateien [..]

> cat file1 file2 ... fileN | sort | uniq

..und falls bei 3000 Dateien die maximale Pufferlänge überschritten 
wird:
$ find /source/of/stuff/ -type f -print0 | xargs -0 cat | sort | uniq

von foobar (Gast)


Lesenswert?

Wenn du viel RAM hast, alles in einem Rutsch:
1
sort -u *.txt >out.txt

Sparsamer: jedes File sortieren und dann mergen:
1
for i in *.txt; do sort -u "$i" >"$i.sorted"; done
2
sort -m -u *.sorted >out.txt

(Nur runtergetippt, nicht getestet)

von leo (Gast)


Lesenswert?

Lord Hesketh-Fortescue aus North Cothelstone Hall schrieb im Beitrag 
#5748506:
> cat file1 file2 ... fileN | sort | uniq

Da wir die Anwort wohl "line too long" sein.
Aber im Prinzip, ja - mit "find ... | xargs ..." erweitern geht.

leo

von Timo (Gast)


Lesenswert?

emacs kann auch große Dateien bearbeiten

von Jemand (Gast)


Lesenswert?

Flodder schrieb:
> - Zeilenweise sortieren

Nach welcher Metrik überhaupt?

Flodder schrieb:
> - gleiche Zeilen entfernen

Muss denn Unicode unterstützt werden, oder reicht ASCII?

von leo (Gast)


Lesenswert?

Jemand schrieb:
>> - gleiche Zeilen entfernen
>
> Muss denn Unicode unterstützt werden, oder reicht ASCII?

Deutest du "unicode normalization" an?
Bewahr den TO vor solchen Komplikationen ;-)

Ich sag nur "µ" vs. "μ".

leo

von leo (Gast)


Lesenswert?

leo schrieb:
> Ich sag nur "µ" vs. "μ".

Ha, und schon haben wir den Salat.
Ich schrieb ca. U+00B5 vs. U+03BC also mikro vs. mue.

leo

von Jemand (Gast)


Lesenswert?

leo schrieb:
> Jemand schrieb:
>>> - gleiche Zeilen entfernen
>>
>> Muss denn Unicode unterstützt werden, oder reicht ASCII?
>
> Deutest du "unicode normalization" an?
> Bewahr den TO vor solchen Komplikationen ;-)
>
> Ich sag nur "µ" vs. "μ".
>
> leo

Ist ja langweilig, wenn Arabisch oder Hebräisch dazukommt, dann wird 
es erst richtig lustig. ;)

von Flodder (Gast)


Lesenswert?

Jemand schrieb:
> Muss denn Unicode unterstützt werden, oder reicht ASCII?

ASCII würde reichen...

von Yalu X. (yalu) (Moderator)


Lesenswert?

foobar schrieb:
> Sparsamer: jedes File sortieren und dann mergen:
> for i in *.txt; do sort -u "$i" >"$i.sorted"; done
> sort -m -u *.sorted >out.txt
>
> (Nur runtergetippt, nicht getestet)

Dein Vorschlag gefällt mir sehr gut, vor allem für Rechner mit schwacher
RAM-Ausstattung. Ich habe ihn mal auf meinem Rechner mit 6GB RAM
ausprobiert:

Dazu habe ich 3000 Dateien mit je 100000 Zeilen mit je 50 zufälligen
Ziffern generiert. sort verarbeitet im Merge-Modus defaultmäßig nur
bis zu 16 Eingabedateien gleichzeitig, bei einer größeren Anzahl werden
sie in 16er-Gruppen in Temporärdateien gemerget, und das so lange, bis
am Ende nur noch eine einzelne Datei übrig bleibt. Die Temporärdateien
haben erst einmal mein /tmp-Verzeichni (RAM-Disk mit 2,9G) gesprengt.
Man kann das Limit mit --batch-size von 16 auf 3000 erhöhen, stößt dann
aber auf ein weiteres Limit von 1024 Dateien pro Prozess. Dieses kann
man mit prlimit ebenfalls erhöhen, so dass der Befehl für das Mergen
ohne Temporärdateien so lautet:

1
prlimit -n3003 sort -mu --batch-size=3000 *.sorted > out.txt

Beides zusammen (Sortieren der 3000 Einzeldateien und Mergen) hat bei
mir auf einer mechanischen Festplatte eine knappe halbe Stunde gedauert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.