Forum: PC-Programmierung grep oder fgrep unter Windows - csv Zeilenumbruch fehlt


von Ingo R. (ingo_r327)


Lesenswert?

Guten Tag liebes Forum, Ihr wart mir immer eine Hilfe!

Doch nun zu meinem Problem.
grep -Zeilenumbrüche fehlen-


Die Lösung muß in einer Batch erfolgen, die zwischen Programm "A" und 
"B" eine Datei übergibt.

Programm "A" gibt eine CSV mit 24 Spalten und ";" als Delimiter aus. 
Jede Zeile (von etwa 15.000) ist mit Zeilenumbruch abgeschlossen.

In der ersten Spalte steht true oder false. Die Datensätze mit true 
sollen
entfernt werden.
Programm "B" übernimmt die verbleibenden false Zeilen (etwa 4000) zur 
Weiterverarbeitung.

Bisher habe ich das in einer Batch gelöst, allerdings mit herben 
Laufzeitproblemen.
Ich lud von unxutils.sourceforge.net die GNU utilities for Win32 
herunter und den Einzeiler
1
grep -w "false" \\SERVERIP\Daten\0-PROJ-0\trim\Verkäufe.txt >\\SERVERIP\Daten\0-PROJ-0\trim\Verkäufe.csv

in die Batch eingebaut.
Läuft auch prima, nur fehlen in der von grep erstellten Datei die 
Zeilenumbrüche in der CSV (Zeile mit hex 0A abgeschlossen, statt HEX 0D 
0A.

Wie kann die Zeilenumbrüche mit übergeben? Eventuell bin ich blind.
In der unter WIN laufenden Batch hatte ich zunächst die Codepages in 
Verdacht und unter CHCP 850 und CHCP1252 getestet. Erfolglos.
Mit fgrep das Gleiche.
Vielleicht hat jemand eine Idee.

Gruß rubcom und danke im Vorraus.

von Daniel A. (daniel-a)


Lesenswert?

Mit cygwin Compilierte unix tools verwenden linux line endings. Du 
könntest die Ausgabe über sed leiten:
1
grep -w "false" bla.csv | sed 's/$/\r/' > bla2.csv

: Bearbeitet durch User
von Ingo R. (ingo_r327)


Lesenswert?

Danke Daniel, für die schnelle Hilfe

kann das leider erst morgen ausprobieren.
Melde mich mit dem Ergebnis.

Gruß Ingo

von Vlad T. (vlad_tepesch)


Lesenswert?

Ingo R. schrieb:
> Ich lud von unxutils.sourceforge.net die GNU utilities for Win32

google mal nach gnuwin32.
Ich finde die irgendwie besser, als die unxutils.

: Bearbeitet durch User
von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

> In der ersten Spalte steht true oder false.

> grep -w "false" bla.csv



Ich hoffe "false" steht in keiner anderen Datenspalte: diese Zeilen 
werden ebenso selektiert.

Mit "^" wird explizit der Zeilenanfang spezifiziert (und somit eine RE 
gegeben, sonst würde ja das primitive 'find' von DOS genügen...) und mit 
";" der Spaltentrenner.

Option -U weist grep an, die Datei als binary zu behandeln, lässt also 
die Zeilenende ohne Konversion stehen.
1
grep -wU "^false;" bla.csv

Option -i macht die Sache unabhängig von Gross-/Kleinschreibung.

von guest (Gast)


Lesenswert?

Kommandozeile vor dem Frühstück für Alle! schrieb:
> sonst würde ja das primitive 'find' von DOS genügen

Und falls man mehr braucht gibt es auch noch 'findstr', dann klappt es 
auch mit RE und man kann auf den Umweg über Unix-Tool komplett 
verzichten

von Ingo R. (ingo_r327)


Lesenswert?

Hallo Daniel,
klappt... allerdings nur, unter Linux als Ein(zwei)zeiler.
Unter Windows in der Batch wird es wieder ein Mehrzeiler.

Danke, hat aber geholfen.
Gruß Ingo

von Ingo R. (ingo_r327)


Lesenswert?

guest schrieb:
> Kommandozeile vor dem Frühstück für Alle! schrieb:
>> sonst würde ja das primitive 'find' von DOS genügen
>
> Und falls man mehr braucht gibt es auch noch 'findstr', dann klappt es
> auch mit RE und man kann auf den Umweg über Unix-Tool komplett
> verzichten
Hallo

Bisher wurde es mit find gelöst. Danke auch für die ausführliche 
Erläuterung zum grep.
-U binary war die Lösung.

Gruß Ingo

von Ingo R. (ingo_r327)


Lesenswert?

Vlad T. schrieb:
> Ingo R. schrieb:
>> Ich lud von unxutils.sourceforge.net die GNU utilities for Win32
>
> google mal nach gnuwin32.
> Ich finde die irgendwie besser, als die unxutils.

Übrigens, das mit den gnuwin32 zu machen ist aus einem alten Thread von 
Dir :-))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.