• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

automatisches Einfügen von Zeilenumbrüchen in TXT

Moin,

ich suche ein Programm das in eine Text Datei automatisch Zeilenumbrüche (am besten wäre ein belibiges Zeichen das ich einstellen kann) einfügt.
Ich will, dass es bei einer Text Datei die Nummerierung erkennt (leider sind auch noch andere Zahlen drin, also nur Fortlaufende) und nach jeder Fortlaufenden Nummer ein Zeilenumbruch (oder eben das Zeichen) einfügt. Wäre also quasi eine gewisse intelligenz von dem Programm gefordert... :D

Ich hoffe, dass es sowas überhaupt gibt... :D

danke schon mal für eure Antworten, Markus
 

abgdf

Guru
Kann man relativ leicht machen, z.B. in Perl. Aber poste doch mal bitte einen aussagekräftigen Ausschnitt Deiner Textdatei und gib an, wo genau was reinsoll.

Gruß
 
OP
A

Autchirion

Newbie
Schwierig... :) Ich werde es mal versuchen, weil wenn ich hier wirklich Teile davon poste, ist das gleich mal knack voll... :D

Hier steht ganz ganz viel Text, danach kommt eine Zahl vor der ein Zeilenumbruch eingefügt werden soll. 1. Hier steht alles was es zum Ersten Abschnitt zu wissen gibt, z.B. auch ein paar Zahlen wie 1983 und 21 Meter. Danach kommt kommt der nächste Abschnitt. 2. Auch hier steht was und es geht immer so weiter. Danach kommt 4. und danach natürlich 5. wenn ich das alles hier posten würde, wäre das eben viel zu lange. Ich hoffe du kannst mit dem Beispiel was anfangen.

danke schon mal, Markus
 
A

Anonymous

Gast
Hier steht ganz ganz viel Text, danach kommt eine Zahl vor der ein Zeilenumbruch eingefügt werden soll. 1. Hier steht alles was es zum Ersten Abschnitt zu wissen gibt, z.B. auch ein paar Zahlen wie 1983 und 21 Meter. Danach kommt kommt der nächste Abschnitt. 2. Auch hier steht was und es geht immer so weiter. Wenn jetzt hier noch 3. stehen würde, würde folgendes vieleicht auch funktionieren. Danach kommt 4. und danach natürlich 5. wenn ich das alles hier posten würde, wäre das eben viel zu lange. Ich hoffe du kannst mit dem Beispiel was anfangen.
mein Versuch auf der Konsole mit awk (dein Text steht in der File DATEI; Ausgabe Standardausgabe)

Code:
cat DATEI | awk 'BEGIN{ZAHL=1; ORS=" "};{for(i=1;i<=NF;i++){if($i==ZAHL){print"\n";ZAHL+=1};print $i,"" ;}}END{print"\n"}'
Ergebnis
Hier steht ganz ganz viel Text, danach kommt eine Zahl vor der ein Zeilenumbruch eingefügt werden soll.
1. Hier steht alles was es zum Ersten Abschnitt zu wissen gibt, z.B. auch ein paar Zahlen wie 1983 und 21 Meter. Danach kommt kommt der nächste Abschnitt.
2. Auch hier steht was und es geht immer so weiter. Wenn jetzt hier noch
3. stehen würde, würde folgendes vieleicht auch funktionieren. Danach kommt
4. und danach natürlich
5. wenn ich das alles hier posten würde, wäre das eben viel zu lange. Ich hoffe du kannst mit dem Beispiel was anfangen.
Autchirion schrieb:
Wäre also quasi eine gewisse intelligenz von dem Programm gefordert...
Programme haben derzeit noch wenig eigene Intelligenz, noch muss der Programmierer seine eigene immer in das Programm reinstecken ;) ;) ;)

robi
 

abgdf

Guru
@robi: Kriege leider nicht dieselbe Ausgabe, sondern eher sowas wie Blocksatz :? ?

Mein Vorschlag:
Code:
cat DATEI | perl -e 'while(<>) {s/ (\d+\.) /\n$1 /g; print}'

Sucht aber nach "Leerzeichen Zahl Punkt Leerzeichen". Nimmt keine Rücksicht auf die Reihenfolge der Zahlen. Vielleicht reicht's ja.

Gruß
 
A

Anonymous

Gast
abgdf schrieb:
@robi: Kriege leider nicht dieselbe Ausgabe, sondern eher sowas wie Blocksatz :? ?
ok, altes Problem bei awk ;) das funktioniert nur wenn deine LANG-Variable in der Konsole auf POSIX gesetzt ist, ist bei mir nicht nur bei root sondern bei einigen Konsolusern auch der Fall) Im Normalfall wird bei den meisten bei einem User
Code:
LANG=de_DE.UTF-8
gesetzt sein.
müsste vor dem Befehl auf
Code:
LANG=POSIX
umgesetzt werden.

gefunden wird dann in diesem Beispiel nicht nur "ZAHL." sondern auch nur "ZAHL" , Ich habe hier die automatische Typenanpassung von awk ein bisschen angezapft. ;) ;) ;) Streng genommen suche ich nach einer Dezimalzahl zB "3.0" und aktzeptiere dabei auch "3" und "3." durch die automatischen Typenanpassung.

abgdf schrieb:
Code:
cat DATEI | perl -e 'while(<>) {s/ (\d+\.) /\n$1 /g; print}'
ich war ganz erstaunt das man es mit Perl auch so kurz hinbekommt. :schockiert: :schockiert: :schockiert:
Hat aber im Moment wohl noch den Nachteil, das es nicht streng der Reihe nach geht sondern vor jeder Leerzeichen-Zahl-Punkt-Kombination eine Zeilensprung macht. Also nicht streng sortiert, Kommt uU dann öfter mal Mist raus wenn nach einer normalen Zahl ein Satzpunkt folgen sollte, je nach Rohdaten. Beispiel ein paar Punkte eingeführt.
1. Hier steht alles was es zum Ersten Abschnitt zu wissen gibt, z.B. auch ein paar Zahlen wie
1983. und
21. Meter. Danach kommt kommt der nächste Abschnitt.
2. Auch hier steht was und es geht immer so weiter. Wenn jetzt hier noch


robi
 

abgdf

Guru
Hi,

hier nochmal eine etwas genauere Perl-Version:
Code:
cat DATEI | perl -e '$a = 1; while(<>) {while(/ $a\. /) {s/ $a\. /\n$a\. /; $a++} print}'
Der Code ist immer noch schön kurz. Das hat mich auch überrascht.
Allerdings wird der Text so viele Male durchsucht. Das könnte etwas auf die Performance gehen. Man kann nicht alles haben :roll:.

Gruß
 
Oben