
93578
27.04.2018, aktualisiert um 11:29:52 Uhr
Eine Textdatei auf mehrere Dateien alphabetisch aufteilen. Kriterium - erste 2 Buchstaben
Hallo an alle,
ich habe eine große Textdatei.
Diese Datei will ich auf mehrere kleinere Dateien aufteilen und zwar nach erste 2 Buchstaben in alphabetischer Reihenfolge:
aa.txt
ab.txt
ac.txt
ad.txt
..
ba.txt
bb.txt
...
za.txt
zb.txt
...
zz.txt
Weiß jemand wie ich das einstellen kann?
Bis jetzt habe ich folgendes Script benutzt, um die Dateien nach ersten Buchstaben aufteilen:
Wie kann man diesen Script für die neue Aufgabe abändern? Ja, ich weiß, man kann auch diesen Script irgendwie eleganter lösen, aber ich habe nur rudimentäre Kenntnisse im Linux.
ich habe eine große Textdatei.
Diese Datei will ich auf mehrere kleinere Dateien aufteilen und zwar nach erste 2 Buchstaben in alphabetischer Reihenfolge:
aa.txt
ab.txt
ac.txt
ad.txt
..
ba.txt
bb.txt
...
za.txt
zb.txt
...
zz.txt
Weiß jemand wie ich das einstellen kann?
Bis jetzt habe ich folgendes Script benutzt, um die Dateien nach ersten Buchstaben aufteilen:
cat file.txt | grep -i '^a' > a.txt
cat file.txt | grep -i '^b' > b.txt
cat file.txt | grep -i '^c' > c.txt
cat file.txt | grep -i '^d' > d.txt
cat file.txt | grep -i '^e' > e.txt
cat file.txt | grep -i '^f' > f.txt
cat file.txt | grep -i '^g' > g.txt
cat file.txt | grep -i '^h' > h.txt
cat file.txt | grep -i '^i' > i.txt
cat file.txt | grep -i '^j' > j.txt
cat file.txt | grep -i '^k' > k.txt
cat file.txt | grep -i '^l' > l.txt
cat file.txt | grep -i '^m' > m.txt
cat file.txt | grep -i '^n' > n.txt
cat file.txt | grep -i '^o' > o.txt
cat file.txt | grep -i '^p' > p.txt
cat file.txt | grep -i '^q' > q.txt
cat file.txt | grep -i '^r' > r.txt
cat file.txt | grep -i '^s' > s.txt
cat file.txt | grep -i '^t' > t.txt
cat file.txt | grep -i '^u' > u.txt
cat file.txt | grep -i '^v' > v.txt
cat file.txt | grep -i '^w' > w.txt
cat file.txt | grep -i '^x' > x.txt
cat file.txt | grep -i '^y' > y.txt
cat file.txt | grep -i '^z' > z.txt
cat file.txt | grep -i '^[0-9]' > 09.txt
cat file.txt | grep -i '^[[:punct:]|[:space:]]' > symbole.txt
Wie kann man diesen Script für die neue Aufgabe abändern? Ja, ich weiß, man kann auch diesen Script irgendwie eleganter lösen, aber ich habe nur rudimentäre Kenntnisse im Linux.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372424
Url: https://administrator.de/forum/eine-textdatei-auf-mehrere-dateien-alphabetisch-aufteilen-kriterium-erste-2-buchstaben-372424.html
Ausgedruckt am: 05.05.2025 um 23:05 Uhr
13 Kommentare
Neuester Kommentar

Einzeiler...
oder auch
usw.
??
cat test.txt | gawk '{print $0 >>tolower(substr($0,0,2))".txt"}'
for x in $(cat test.txt);do echo $x>>$(echo "${x:0:2}" | tr '[:upper:]' '[:lower:]').txt ;done
ich habe nur rudimäntere
Welcher Rudi mit welchem Mantel 
Das zwischengeschaltete sort kannst du auch weglassen geht ebenso und dann kannst du später nur in den einzelnen Dateien sortieren:
gawk '{print $0 >>substr($0,0,2)".txt"}' test.txt
for x in $(echo {a..z}{a..z}.txt);do [ -f "$x" ] && sort -o "$x" "$x";done
200 GB - 1 TB groß
Dann solltest du dringend dein Konzept mit Textdateien überdenken und auf Datenbank switchen.
Zitat von @93578:
Variant 1 funktioniert nicht korrekt. Ich bekomme jeweils 2 Dateien für 1 Buchstabe (z.B.: A.txt und a.txt), aber nicht aa.txt, ab.txt, ac.txt...
Du hast es oben in deinem Skript selbst als a.txt b.txt usw. ausgeben, und nicht nach aa.txt usw, du widersprichst dir selbst Variant 1 funktioniert nicht korrekt. Ich bekomme jeweils 2 Dateien für 1 Buchstabe (z.B.: A.txt und a.txt), aber nicht aa.txt, ab.txt, ac.txt...
Erst denken dann eindeutig und verständlich beschreiben....
Zur Info: Ist im letzten Beispiel auf zwei Buchstaben aktualisiert...

Er wollte es in den Zieldateien aber "alphabetisch"
. Er kann es hinterher effektiver in den Einzeldateien nachsortieren.

Zitat von @93578:
Die Inhalte von neuen Dateien aa.txt, ab.txt-zz.txt sollen nicht unbedngt sortiert werden.
Na dann reicht jaDie Inhalte von neuen Dateien aa.txt, ab.txt-zz.txt sollen nicht unbedngt sortiert werden.
gawk '{print $0 >>tolower(substr($0,0,2))".txt"}' test.txt

Zitat von @93578:
Variant 2 läuft dementsprechend auch falsch.
Nein, siehe letztes Kommentar.Variant 2 läuft dementsprechend auch falsch.