Zeilenumbrüche aus Dateien entfernen

Hallo,

habe folgendes Problem. Ich habe eine große Anzahl an Dateien, in denen eine unterschiedliche Anzahl an Zeilen stehen. Ich möchte pro Datei alle Zeilenumbrüche entfernen. Also als Beispiel:

Vorher:
Datei 1:
Zeile 1
Zeile 2
Datei 2:
Zeile 1
Zeile 2
Zeile 3
usw.

Nachher (Liste in folgendem Format):
Dateiname Datei 1; Zeile 1; Zeile 2
Dateiname Datei 2; Zeile 1; Zeile 2; Zeile 3
usw.

Habe es zuerst mit tr ‚\n‘ ‚;‘ versucht. Dann wird mir aber der Inhalt aller Dateien in eine Zeile geschrieben. Mit sed bekomme ich das auch nicht sauber hin. Weiß jemand Rat? Danke im Voraus…

Habe es zuerst mit tr ‚\n‘ ‚;‘ versucht. Dann wird mir aber
der Inhalt aller Dateien in eine Zeile geschrieben. Mit sed
bekomme ich das auch nicht sauber hin. Weiß jemand Rat? Danke
im Voraus…

Kann es sein das du erwartest das wir wissen welches tool nun tr ist ? DOS , Perl , PHP , Linux , OSX , Windowsshell ?

Sorry, das System ist eine Sparc Maschine mit einem Sparc Debian Linux drauf. tr & sed sind Shell-Befehle…

da würd ich ein perl one-liner nehmen .

Hallo Sven,

Habe es zuerst mit tr ‚\n‘ ‚;‘ versucht. Dann wird mir aber
der Inhalt aller Dateien in eine Zeile geschrieben.

Wieso denn das? Bei mir funktioniert das prima:

for f in \*; do tr '\n' ';' $f.neu; done

gibt zum Schluss dieses Ergebnis:

kb@lenny:/tmp/xyz$ ls -l
insgesamt 24
-rw-r--r-- 1 kb kb 32 10. Mai 18:39 datei1
-rw-r--r-- 1 kb kb 32 10. Mai 18:47 datei1.neu
-rw-r--r-- 1 kb kb 21 10. Mai 18:40 datei2
-rw-r--r-- 1 kb kb 21 10. Mai 18:47 datei2.neu
-rw-r--r-- 1 kb kb 40 10. Mai 18:41 datei3
-rw-r--r-- 1 kb kb 40 10. Mai 18:47 datei3.neu

Inhalt von datei1:

alpha-1
alpha-2
alpha-3
alpha-4

daraus wird datei1.neu:

alpha-1;alpha-2;alpha-3;alpha-4;

der Rest dito…
Oder habe ich dich falsch verstanden?
Bei der Schleife kommt es natürlich etwas drauf an, wie und wo deine Dateien liegen. Da Du nichts darüber sagst, habe ich einfach mal angenommen, alle sind in einem Verzeichnis. Ginge aber mit find auch, wenn dem nicht so wäre.

Viele Grüße
Marvin

Moin Sven,

ich gehe davon aus, daß dein Ansatz bei EINER Datei funktioniert, nur daß bei mehreren Dateien das Ergebnis („der Inhalt aller Dateien in eine Zeile geschrieben“) nicht das gewünschte ist? Oder?

Wie lautet denn dein Aufruf von tr bzw. SED?

Grüße

godam

Hi,

soweit war ich mit meinem Einzeiler auch gekommen. Wenn man nämlich nen cat *.neu auf die Dateien macht, dann steht auch alles in einer Zeile, weil am Ende der Dateien die Zeilenumbrüche fehlen. Hab´s jetzt mit

ls *.neu | while read n; do Z=cat $n; echo -e „$n; $Z“; done

gemacht. Das hat gefunzt. Danke für den Tipp.

Hallo Sven,

Wenn man
nämlich nen cat *.neu auf die Dateien macht, dann steht auch
alles in einer Zeile

Naja, sowas habe ich schon fast gedacht.
man cat:

**Verkette** DATEI(en)...

Wird gern übersehen, daß cat ja zuerst aus vielen Dateien eine macht, daher ja auch der Name Con cat enate

Viele Grüße
Marvin

Nachfrage
Hallo Sven,
ich habe jetzt das getan, was ich vorhin versäumt habe, mir dein Skript näher angesehen. Fehlt da was, oder verstehe ich dich völlig falsch oder liegts an deinem Sparc Debian Linux?

ls *.neu | while read n; do Z=cat $n; echo -e „$n; $Z“; done

Das macht bei mir nichts weiter, als die Dateien einzulesen und sie dann mit vorangestelltem Dateinamen zeilenweise wieder auszugeben. Von Zeilenumbrüchen entfernen kann ich da nichts sehen.
Bei mir sieht das Resultat auf dem Terminal einfach so aus:

datei1.txt; Zeile1\_a
Zeile2\_a
Zeile3\_a
datei2.txt; Zeile1\_b
Zeile2\_b
Zeile3\_b
Zeile4\_b
datei3.txt; Zeile1\_c
Zeile2\_c
Zeile3\_c
Zeile4\_c
Zeile5\_c

Insofern verstehe ich nicht, warum das bei dir funktioniert? Will ja nicht aufdringlich sein, aber sowas lässt mir dann doch keine Ruhe :wink:

Viele Grüße
Marvin