2016-07-11 5 views
0

Ich habe Daten ähnlich den einzelnen Datensatz unten in users.csv Datei [Linux-Umgebung] gezeigt:Entfernen Zeilenumbruch in CSV-Datei - Linux

"1583787721","tusharmisra","[email protected]","","","Ok 
","https://www.yammer.com/api/v1/users/1583787721","","","2016-005T11:20:08.942Z","","","","","","active" 

Hier, wie ich den Zeilenumbruch entfernen (Zeile umgebrochen?) In die CSV-Datei mit einem Bash-Skript. Ich habe mindestens 1000 Datensätze in users.csv.

+0

Ist es Anzahl der Felder festgelegt hat? – sat

+0

ja mit 16 Feldern. – user3007361

+0

Sie haben also CSV-Datensätze, bei denen ein in Anführungszeichen eingeschlossenes Feld (manchmal) einen Zeilenumbruch enthält und Sie den Zeilenumbruch entfernen möchten, wenn es das letzte Zeichen in dem Feld ist, und es durch ein Leerzeichen ersetzen, wenn es nicht das letzte Zeichen ist im Feld? Es würde helfen, wenn Sie die erwartete Ausgabe zeigen würden. Ich vermute auch, dass das Beispiel nicht so minimal ist, wie es sein könnte (es ist also kein MCVE ([MCVE])). Sie könnten ein Beispiel mit 6 Feldern anstelle von 16 zeigen. Mit dem Split in der 3. oder so. Ist es immer das gleiche Feld, oder ist es eines der Felder? –

Antwort

0

können Sie versuchen, diese awk:

awk -F, 'NF!=16&&!line{line=$0;next} NF!=16&&line{line=line $0} {n=split(line, a, ",")} n==16{print line;line=""}' file.csv 
0
$ gsed '/,"[^"][^"]*$/{N;s/\n//}' data.in >data.new 

Das GNU sed Skript aus der Datei gelesen werden data.in und jede Zeile finden, die mit ,"XXX endet, wo XXX beliebige Zeichenfolge nicht die " Zeichen enthalten sein können . Dies weist auf eine umbrochene Zeile hin (in dem Beispiel, das Sie angegeben haben).

Wenn eine solche Zeile gefunden wird, wird die nächste Eingabezeile an sie angehängt, und jede neue Zeile in der verketteten Zeile wird entfernt.

Die resultierende Linie wird wie jede nicht modifizierte Linie ausgegeben.

Der Ausgang wird in data.new gespeichert.

0

Basierend auf feste Anzahl der Felder, die Sie dieses awk verwenden können:

awk -F '"[^"]+"' 'NF<15{s = s $0; next} s{print s; s=""} 1; END{if (s) print s}' file