(gelöst)Textdatei sortieren oder Zeilen verändert verdoppeln

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
AndreK
Beiträge: 469
Registriert: 17.05.2007 19:20:58

(gelöst)Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von AndreK » 15.12.2009 13:02:40

Ich suche eine super simple Möglichkeit eine Textdatei zu sortieren. Der Inhalt der rohen Ausgangsdatei ist:

Code: Alles auswählen

test.de
example.com
beispiel.de
muster.net
und so weiter
Ideal wäre es, wenn ich mit sed oder einem anderen Tool jede Zeile kopieren könnte und einen Punkt als erstes Zeichen einfüge. Das Ergebnis soll danach so aussehen:

Code: Alles auswählen

test.de
.test.de
example.com
.example.com
beispiel.de
.beispiel.com
muster.net
.muster.net
und so weiter
Das würde mir die Sortierung ersparen. Leider weiss ich nicht ob z. B. sed das kann.

Meine jetzige Lösung sieht so aus, dass ich per sed eine zweite Datei mit den .test.de schreiben lasse und danach beide Dateien per cat zu einer zusammen füge. Ich habe versucht mit sort den Inhalt passend zu sortieren, aber ohne Erfolg. Wie mache ich das?
Zuletzt geändert von AndreK am 15.12.2009 14:12:10, insgesamt 2-mal geändert.

uname
Beiträge: 12424
Registriert: 03.06.2008 09:33:02

Re: Kann das sort oder sed?

Beitrag von uname » 15.12.2009 13:45:39

Vielleicht so:

Code: Alles auswählen

cat test.txt | xargs -i echo -e "{}\n.{}" 

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von Meillo » 15.12.2009 13:47:59

Code: Alles auswählen

<input.txt sed 's/.*/&\
.&/'
oder

Code: Alles auswählen

<input.txt sed 'p;s/^/./'
Use ed once in a while!

AndreK
Beiträge: 469
Registriert: 17.05.2007 19:20:58

Re: Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von AndreK » 15.12.2009 14:11:07

uname hat geschrieben:Vielleicht so:

Code: Alles auswählen

cat test.txt | xargs -i echo -e "{}\n.{}" 
Danke das funktioniert, hätte aber nicht gedacht, dass es bei 697.000 Zeilen sooo lange dauert.
Meillo hat geschrieben:

Code: Alles auswählen

<input.txt sed 's/.*/&\
.&/'
Ergibt:

test.de.test.de
example.de.example

Code: Alles auswählen

<input.txt sed 'p;s/^/./'
Funktioniert und ist wesentlich schneller als die Lösung von uname. Auch Dir danke.

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von chrisbra » 15.12.2009 17:07:00

AndreK hat geschrieben:
Meillo hat geschrieben:

Code: Alles auswählen

<input.txt sed 's/.*/&\
.&/'
Ergibt:

test.de.test.de
example.de.example
Sicher? Das sollte so funktionieren. Gnu Sed erlaubt auch die Verwendung von \n als Zeilenumbruch.

Code: Alles auswählen

chrisbra t41:~ [1018]% echo -e '1\n2\n3' | sed -e 's/.*/&\n.&/'
1
.1
2
.2
3
.3
chrisbra t41:~ [1019]% echo -e '1\n2\n3' | sed -e 'h;G;s/\n/&./'
1
.1
2
.2
3
.3
Das zweite Beispiel sollte auch mit jedem sed funktionieren (und ist nur als Alternative angegeben).
Meine Whishlist
:wq!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von Meillo » 15.12.2009 17:09:11

AndreK hat geschrieben:
Meillo hat geschrieben:

Code: Alles auswählen

<input.txt sed 's/.*/&\
.&/'
Ergibt:

test.de.test.de
example.de.example
Es sollte wenn dann

Code: Alles auswählen

test.de.test.de
example.de.example.de
sein.

Hast du diesen Backslash und ein Enter getippt? Ich hab's mit gsed und dem sed aus NetBSD erfolgreich getestet. (Bei Heirloom sed geht's allerdings nicht, deshalb lieber die zweite Variante verwenden.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Textdatei sortieren oder Zeilen verändert verdoppeln

Beitrag von Meillo » 15.12.2009 17:11:56

chrisbra hat geschrieben:

Code: Alles auswählen

chrisbra t41:~ [1019]% echo -e '1\n2\n3' | sed -e 'h;G;s/\n/&./'
[...] sollte auch mit jedem sed funktionieren [...]
Sieht so aus. Beim NetBSD sed und Heirloom sed klappt's.
Use ed once in a while!

Antworten