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

AWK: Bestimmte Zeilenumbrüche aus Textdatei entfernen ...

cenk007

Newbie
Hallo,

kann mir jemand bei folgendem Problem helfen?

Ich habe ein (Excel) CSV Datei. Die meisten Zeilen sind "korrekt". Aber da manche Zellen im Excel Sheet Zeilenumbrüche und Leerzeilen beinhalten, sind die Zeilenumbrüche und Leerzeilen auch in der CSV Datei. Um diese Datei vernünftig weiter verarbeiten zu können, muß ich diese Zeilenumbrüche und Leerzeilen wieder loswerden.

Idee ist, jede Zeile in der CSV Datai sollte normalerweise mit " ; " enden ... Wenn nun so eine Zeile nicht mit ";" endet, dann soll die nächste Zeile angefügt werden, bzw. der Zeilenumbruch entfernt werden, bis die neue Zeile mit einem " ; " endet.

Ich habe mit awk herumexperementiert ... mit /\;$/ kriege ich schon mal die "abgrebochenen" Zeilen ... aber das Zusammenfügen mit der nächsten Zeile funktioniert nicht :-(

Kann mir da jemand weiterhelfen ???

Danke!!!
 
OP
C

cenk007

Newbie
Danke, aber du scheinst mich missverstanden zu haben :-( Oder ich habe dich missverstanden?!

Die Zeilen in der CSV Datei sehen zum beispiel so aus

Zeile 1: xxxxxx; yyyyyy; zzzzzzz;
Zeile 2: aaaaa;bbb
bb

bbbbbb
bb;ccccccccccccc;
Zeile 3: 1111111;22222222;33333333;


Ich möchte die Zeilenumbrüche und Leerzeilen aus "Zeile 2:" entfernt haben!!!

D.h. die Zeile 2 soll dann auch aus EINER Zeile bestehen, die dann so aussieht.: aaaaa;bbb bb bbbbbb bb;cccccccccccc;

Alle Klarheiten beseitigt?!
 

Leviathan

Hacker
Hab bisschen rumgedoktert:

wobei test der dateiname ist
grep -Evi "^$" test| sed s/\ $//g| sed -e s/\;$/___/ | tr -d '\n'|sed s/___/\\n/g

Den reg. ausdruck fuer "beliebig viele leerzeichen am zeilenende" weiß ich nicht.

erklärung was es macht:

Schneide alle leeren Zeilen erst mal weg.
Ersetze ggf. Leerzeichen am zeilenende
Ersetze ; am zeilenende durch 3 Unterstriche
lösche den Zeilenumbruch
ersetze die 3 unterstriche durch einen Zeilenumbruch.

Gruß Dominik
 
OP
C

cenk007

Newbie
Hallo Dominik,

wir kommen der Sache schon näher :)

Dein Ein-Zeiler klappt bis auf das letzte Kommando sed s/___/\\n/g
sehr gut!!!

Leider scheint meine Shell hier den Zeilenumbruch anstelle der Unterstriche nicht einzufügen :-( Genauer gesagt, bekomme ich so überhaupt keine Ausgabe ... Wenn ich den letzten (obigen) Ausdruck weglasse, dann habe ich eine einzeilige Ausgabe mit den Unterstrichen.

Habe schon verschiedenst gequoted bzw. habe auch mit tr nochmal versucht da einen Zeilenumbruch einzufügen, aber ohne erfolg. Any ideas?

Ansonsten, hast du mir schon sehr viel weiter geholfen !!!

Grüße,
Cenk
 

Leviathan

Hacker
tr '_' '\n'|grep -Evi "^$"

nur mgl. wenn du sonst keine _ verwendest
oder einfach mal was ganz anderes als _ probieren, ansonsten ka.

Gruß Dominik
 
Oben