93578
Apr 27, 2018, updated at 09:29:52 (UTC)
2012
13
0
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.
Please also mark the comments that contributed to the solution of the article
Content-Key: 372424
Url: https://administrator.de/contentid/372424
Printed on: April 25, 2024 at 17:04 o'clock
13 Comments
Latest comment
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 , das kannst du aber leicht ändern wenn du dir mal die Doku zu awk durchlesen würdest.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.