zur Navigation

debianforum.de

die deutschsprachige Supportwebseite rund um das Debian-Projekt

Zum Inhalt


 
 
 
  • Foren-Übersicht ‹ Fortgeschrittene Themen ‹ Softwareentwicklung und -paketierung, Scripting

Wie kann ich eine datei zerlegen ?

Antwort erstellen
11 Beiträge • Seite 1 von 1

Wie kann ich eine datei zerlegen ?

Beitragvon Voyager_MP am 16.02.2012 12:13:43

Ich möchte ein txt file in an einer betimmten zeile in mehrere kleine txt files zerlege.

Code: Alles auswählen
2. Inbox Message (Unread)                                                                                                   
Date/time: 15/02/2012 15:50:55 +0100
Sender: +491737465743 Msg Center:
Text:
Tet
1. Inbox Message (Unread)
Date/time: 15/02/2012 16:06:26 +0100
Sender: +491737465743 Msg Center:
Text:
Gggggggg


Zeile zum unterteilen ist (Inbox Message (Unread)) hat einer eine Idee ?
Gruß Michel
Benutzeravatar
Voyager_MP
 
Beiträge: 607
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Meillo am 16.02.2012 12:32:46

Code: Alles auswählen
csplit foo '/Inbox Message (Unread)/' '{*}'
Use ed(1) once in a while!
Benutzeravatar
Meillo
Moderator
 
Beiträge: 3088
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
  • Website
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Voyager_MP am 16.02.2012 12:38:09

Code: Alles auswählen
csplit /tmp/sms/test '/Inbox Message (Unread)/' '{*}'
0
223
108
113



so und nu :) ?!?!
Gruß Michel
Benutzeravatar
Voyager_MP
 
Beiträge: 607
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon yeti am 16.02.2012 12:40:10

Code: Alles auswählen
$ ls -l
insgesamt 4
-rw-r--r-- 1 yeti yeti 219 16. Feb 11:35 DATEN
$ cat DATEN
2. Inbox Message (Unread)
Date/time: 15/02/2012 15:50:55 +0100
Sender: +491737465743 Msg Center:
Text:
Tet
1. Inbox Message (Unread)
Date/time: 15/02/2012 16:06:26 +0100
Sender: +491737465743 Msg Center:
Text:
Gggggggg
$ awk '/^[0-9]+\. Inbox Message/ { f++ } { print >>f }' DATEN
$ ls -l
insgesamt 12
-rw-r--r-- 1 yeti yeti 107 16. Feb 11:38 1
-rw-r--r-- 1 yeti yeti 112 16. Feb 11:38 2
-rw-r--r-- 1 yeti yeti 219 16. Feb 11:35 DATEN
$ cat 1
2. Inbox Message (Unread)
Date/time: 15/02/2012 15:50:55 +0100
Sender: +491737465743 Msg Center:
Text:
Tet
$ cat 2
1. Inbox Message (Unread)
Date/time: 15/02/2012 16:06:26 +0100
Sender: +491737465743 Msg Center:
Text:
Gggggggg
yeti
 
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Voyager_MP am 16.02.2012 12:42:17

sorry dumm von mir :) genau das was ich gesucht habe. Danke
Gruß Michel
Benutzeravatar
Voyager_MP
 
Beiträge: 607
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Meillo am 16.02.2012 12:59:12

yeti hat geschrieben:
Code: Alles auswählen
$ awk '/^[0-9]+\. Inbox Message/ { f++ } { print >>f }' DATEN

Das ist die andere gute Variante. Hierbei sollte man nur aufpassen, die Dateien auch wieder zu schliessen, da einem in so einem Fall nur allzu schnell die Dateideskriptoren ausgehen.
Use ed(1) once in a while!
Benutzeravatar
Meillo
Moderator
 
Beiträge: 3088
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
  • Website
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Meillo am 16.02.2012 13:08:07

Voyager_MP hat geschrieben:
Code: Alles auswählen
csplit /tmp/sms/test '/Inbox Message (Unread)/' '{*}'
0
223
108
113

so und nu :) ?!?!

Wie? Du fuehrst Code aus einem Forum aus, ohne zuvor (z.B. in den Manpages) zumindest grob herausgefunden zu haben was der Code tut? Das kann auch mal furchtbar in die Hose gehen ...

Und als das Ergebnis unerwartet oder unverstaendlich war, hast du einen Post im Forum verfasst, bevor du die Manpage des einzigen verwendeten Tools auch nur aufgemacht hast. Sonst haettest du naemlich diesen ersten Satz der Beschreibung gefunden:
Output pieces of FILE separated by PATTERN(s) to files ‘xx00’, ‘xx01’, ...,
and output byte counts of each piece to standard output.


Ich bin ein bisschen enttaeuscht. Meinst du, ich haette dir die Zeile hingeschrieben ohne selbst auch in der Manpage gelesen zu haben und mehrere Tests durchgefuehrt zu haben? Genau das habe ich naemlich getan. Nicht weil ich das nicht gerne tun wuerde, aber weil ich erwarte, dass das der Fragende das selbst auch tut bevor er fragt wieso die fertige Loesung (scheinbar) nicht so tut wie er denkt.

So, jetzt ist aber genug geschimpft. :-)
Use ed(1) once in a while!
Benutzeravatar
Meillo
Moderator
 
Beiträge: 3088
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
  • Website
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon yeti am 16.02.2012 13:11:11

Meillo hat geschrieben:
yeti hat geschrieben:
Code: Alles auswählen
$ awk '/^[0-9]+\. Inbox Message/ { f++ } { print >>f }' DATEN

Das ist die andere gute Variante. Hierbei sollte man nur aufpassen, die Dateien auch wieder zu schliessen, da einem in so einem Fall nur allzu schnell die Dateideskriptoren ausgehen.

Code: Alles auswählen
$ awk '/^[0-9]+\. Inbox Message/ { f && close(f) ; f++ } { print >>f }' DATEN

(ungetestet, ich hab grad nicht hinreichend lange Testdaten zur Hand...)
yeti
 
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon uname am 16.02.2012 14:11:10

Code: Alles auswählen
for i in {1..100000}; do echo "hallo"; echo $i; done > test.txt                                             
awk '/^hallo/ { f++ } { print >>f }' test.txt


Ich habe es mal getestet. Wenn man sich Debianlsof anschaut bei z.B. 100000 Abschnitten, so werden immer nur in meinem Fall ca. 1019 Textdateien offen gehalten. Offen sind laut lsof beispielhaft die Dateien 37725 bis 38744 (bei f==38744). Somit kann auf close(f) wohl verzichtet werden. Wäre nun interessant zu erfahren ob sich awk, die Bash oder das Betriebssystem um das aufräumen kümmert. Kennt sich jemand damit aus?
uname
 
Beiträge: 4560
Registriert: 03.06.2008 09:33:02
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon Meillo am 16.02.2012 14:53:47

uname hat geschrieben:
Code: Alles auswählen
for i in {1..100000}; do echo "hallo"; echo $i; done > test.txt                                             
awk '/^hallo/ { f++ } { print >>f }' test.txt


Ich habe es mal getestet. Wenn man sich Debianlsof anschaut bei z.B. 100000 Abschnitten, so werden immer nur in meinem Fall ca. 1019 Textdateien offen gehalten. Offen sind laut lsof beispielhaft die Dateien 37725 bis 38744 (bei f==38744). Somit kann auf close(f) wohl verzichtet werden. Wäre nun interessant zu erfahren ob sich awk, die Bash oder das Betriebssystem um das aufräumen kümmert. Kennt sich jemand damit aus?

In einem der Buecher von Kernighan (das `K' in awk) ist ein eben solches Beipielprogramm enthalten und dazu ist explizit der Hinweis gegeben, dass man die Dateien schliessen sollte. (Damals hatte jeder Prozess nur rund 20 Deskriptoren zur Verfuegung.)

Was fuer ein awk hast du denn verwendet? Bestimmt gawk. Da ist bei mir das Verhalten ebenso: 1019 Files gleichzeitig offen und er schliesst automatisch nach Bedarf.

(Nur so am Rande: 1019 plus die drei Standarddeskriptoren sind 1022, noch ein Platz zum NULL-terminieren ... was haben die wohl mit dem letzten der 1024 Felder gemacht?)

Mawk sagt:
Code: Alles auswählen
mawk: cannot open "1017" for output (Too many open files)



Es ist eine Schande, dass ich gerade keinen Heirloom nawk zu Hand habe. :-(
Use ed(1) once in a while!
Benutzeravatar
Meillo
Moderator
 
Beiträge: 3088
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
  • Website
Nach oben

Re: Wie kann ich eine datei zerlegen ?

Beitragvon uname am 16.02.2012 15:10:56

Ich nutze "gawk" und somit ist meine Frage beantwortet. (g)awk kümmert sich um die Deskriptoren. Ich glaube ich sollte auch mal ein Buch über "awk" lesen.
uname
 
Beiträge: 4560
Registriert: 03.06.2008 09:33:02
Nach oben


Antwort erstellen
11 Beiträge • Seite 1 von 1

Zurück zu Softwareentwicklung und -paketierung, Scripting

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

Willkommen!
Startseite
Chat
Wiki/Tipps
Planet
Bildergalerie
NoPaste
Links
identi.ca-Gruppe
Twitter
dieses und jenes
Forum
Foren-FAQ
Registrieren
Anmelden
Suchen
Erweiterte Suche
unbeantw. Beiträge
aktive Themen



No ePatents Button
FSFE Supporter 2004 Button
top
Zum Seitenanfang
Diese Webseite ist keine offizielle Webseite des Debian Projekts.
Haftungsausschluss und Impressum – debianforum.de Verhaltensregeln

Powered by phpBB © 2000-2008 phpBB Group. Deutsche Übersetzung durch phpBB.de
Template entwickelt von Timo Salmen, basierend auf dem Debian Live Template, entwickelt von Christoph Haas.