Schnelles zeilenweises Einsortieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

Schnelles zeilenweises Einsortieren

Beitrag von root2root » 21.09.2009 10:39:28

Hallo Leute,

ich habe 4 Dateien, deren Inhalt Textzeilen sind. Nun möchte ich die Inhalte dieser 4 Dateien zeilenweise in eine 5te Datei "einsortieren" und zwar so:

Inhalt 5te Datei:
1. Zeile der 1. Datei
1. Zeile der 2. Datei
1. Zeile der 3. Datei
1. Zeile der 4. Datei
2. Zeile der 1. Datei
2. Zeile der 2. Datei
...

Die Menge der Zeilen in den jeweiligen 4 Dateien ist unterschiedlich, d.h. die 5te Datei hat zum Schluß unter Umständen nur noch Inhalte ( restlichen Zeilen ) der Datei mit der größten Zeilenmenge.

Wie krieg ich das hin ?

Dank euch.

Gruß
root2root

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 21.09.2009 11:41:04

z.B. so

Code: Alles auswählen

paste -d\\n 1.txt 2.txt 3.txt 4.txt | sed '/^$/d' > 5.txt
sed löscht hier die evtl. eingefügten Leerzeilen, falls die Dateien eine unterschiedliche Anzahl von Zeilen haben.
MfG GoKi
:wq

root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

Re: Schnelles zeilenweises Einsortieren

Beitrag von root2root » 21.09.2009 14:18:33

Hallo GoKi

danke für Deine schnelle Antwort.
Ich muß mich leicht verbessern:

Die 4 Dateien sind aufgrund eines Suchergebnisses ermittelt. Es könnten noch mehr werden.
1.txt 2.txt ... n.txt. Ansonsten der gleiche Prozess.

Könnte ich jetzt "paste" anstelle von den Dateinamen einen Parameter übergeben, in welchem die Dateinamen gelistet sind ?, z.B. $txtdat ="1.txt 2.txt ... n.txt" (wieviele auch immer)
oder über "find" gleich "pipen" ?

unter http://www.manpagez.com habe ich für paste folgendes konstrukt gefunden
http://www.manpagez.com/man/1/paste/
....
find / -name bin -type d | paste -s -d : -
....

Nun etwas für meine Zwecke abgewandelt:
find . -name | paste -d\\n | sed '/^$/d' > neu.txt

geht das so ?

Danke + Gruß
root2root

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 21.09.2009 14:32:18

Du kannst die Ausgabe eines find Befehls z.B. so einfügen.

Code: Alles auswählen

paste -d\\n `find . -name "*.txt"` | sed '/^$/d' > neu.txt
Dabei sind die Dateinamen jedoch nach den Inodes sortiert, sortiert nach Dateinamen dann bspw. so

Code: Alles auswählen

paste -d\\n `find . -name "*.txt" | sort` | sed '/^$/d' > neu.txt
PS: Also ich lese meine Manpages ja direkt per man und nicht über eine Homepage :)

Code: Alles auswählen

man paste
MfG GoKi
:wq

root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

Re: Schnelles zeilenweises Einsortieren

Beitrag von root2root » 22.09.2009 06:50:42

Danke GoKi
funzt prima
Gruß root2root

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Schnelles zeilenweises Einsortieren

Beitrag von whisper » 22.09.2009 08:19:55

GoKi hat geschrieben: PS: Also ich lese meine Manpages ja direkt per man und nicht über eine Homepage :)

Code: Alles auswählen

man paste
:hail: Ymmd !
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

Re: Schnelles zeilenweises Einsortieren

Beitrag von root2root » 25.09.2009 15:37:16

Hallo GoKi

ist für die Argumentübergabe an paste der Block


`find . -name "*.txt"` das gleiche wie
$( find . -name "*.txt" ) ?

schönes WE
gruß root2root

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 25.09.2009 16:10:09

Code: Alles auswählen

man bash
verrät:
Command Substitution
Command substitution allows the output of a command to replace the command name. There are two forms:

$(command)
or
`command`
MfG GoKi
:wq

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Schnelles zeilenweises Einsortieren

Beitrag von pinguino » 25.09.2009 18:25:01

Code: Alles auswählen

2009-07-28-09-34-11
2009-07-27-09-44-03
2009-07-26-15-31-43
2009-07-28-09-31-05
2009-07-26-18-34-48
2009-07-28-09-58-28
2009-07-26-18-46-50
2009-07-27-10-44-49
2009-07-28-09-37-55
2009-07-28-09-37-42
2009-07-27-11-40-56
2009-07-26-17-32-48
2009-07-26-17-55-26
2009-07-27-09-41-06
2009-07-28-09-08-34
2009-07-27-17-35-27
2009-07-27-11-56-55
2009-07-27-09-30-57
2009-07-28-09-41-17
2009-07-29-14-39-48
2009-07-26-12-52-30
2009-07-28-09-56-10
ich wollte kein 2ten Thread öffnen, deshalb folgende Frage:
Wie könnte ich das vom ältesten Datum bis zum neuestem Datum sortieren. Die letzten 3 Zahlen bedeuten: Stunden, Minuten und Sekunden
Ich bin gerade dabei ein Skript zu basteln aber es funktioniert immer noch nicht richtig.
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 25.09.2009 18:35:01

pinguino hat geschrieben:ich wollte kein 2ten Thread öffnen, deshalb folgende Frage:
Wie könnte ich das vom ältesten Datum bis zum neuestem Datum sortieren. Die letzten 3 Zahlen bedeuten: Stunden, Minuten und Sekunden
Ich bin gerade dabei ein Skript zu basteln aber es funktioniert immer noch nicht richtig.
Hat wenig mit dem Thema hier zu tun. Aber so wie die Daten formatiert sind reicht doch ein einfaches sort?
MfG GoKi
:wq

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Schnelles zeilenweises Einsortieren

Beitrag von pinguino » 25.09.2009 18:38:08

aber unabhängig davon?
Gruß

Pinguino

>>Nota bene<<

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

Re: Schnelles zeilenweises Einsortieren

Beitrag von chrisbra » 25.09.2009 22:55:11

man sort
Meine Whishlist
:wq!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Schnelles zeilenweises Einsortieren

Beitrag von pinguino » 26.09.2009 07:11:49

das hilft nichts
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 26.09.2009 11:52:51

pinguino hat geschrieben:das hilft nichts
Ich versteh dein Problem nicht. Um die von dir angegebene Datei zu sortieren, reicht ein

Code: Alles auswählen

sort dieDatei > sortierteDatei
Ansonsten ist es vielleicht doch besser, einen neuen Thread zu eröffnen mit einer genauen Problembeschreibung.
MfG GoKi
:wq

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Schnelles zeilenweises Einsortieren

Beitrag von pinguino » 26.09.2009 11:56:49

Code: Alles auswählen

2008-01-28-09-34-11
2009-07-27-09-44-03
2009-07-26-15-31-43
2009-07-28-09-31-05
2006-07-26-18-34-48
2009-07-28-09-58-28
2005-07-26-18-46-50
2005-03-27-10-44-49
2009-07-28-09-37-55
2009-07-28-09-37-42
2009-07-27-11-40-56
wenn du folgende Datum in einer Textdatei hättest, wie würdest du das nach Datum bzw. Uhrzeit sortieren?
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Schnelles zeilenweises Einsortieren

Beitrag von GoKi » 26.09.2009 12:18:41

Nach Datum (Erste drei Felder, durch "-" getrennt):

Code: Alles auswählen

sort -t- -k 1,3 dates.txt
Nach Uhrzeit (Ab Feld 4, wiederum durch "-" getrennt):

Code: Alles auswählen

sort -t- -k 4 dates.txt
MfG GoKi
:wq

Antworten