2016-07-27 6 views
-1

Ich habe eine .CSV-Datei mit 52.000 Zeilen. Jede Zeile hat 13 Spalten, die durch ein Trennzeichen '|' getrennt sind. Ungültige Daten werden in der 11. Zeile eingefügt und aufgrund dessen werden neue Zeilenzeichen in der Datei enthalten. Ich soll sie löschen.Ich muss neue Zeilenzeichen in einer CSV-Datei mit mehr als 50.000 Zeilen löschen. Benötigen Linux-Befehl.

+1

Hallo Kiran, willkommen zu Stackoverflow! Bitte geben Sie uns weitere Informationen - Was haben Sie bisher versucht (Code)? Dies ist eine gute Quelle, um eine gute Frage zu stellen: http://stackoverflow.com/help/how-to-ask – Jurik

+0

Unter Linux hat jede Zeile einer Datei am Ende einen Zeilenumbruch. Können Sie genauer festlegen, welche Zeilenumbrüche Sie löschen möchten? –

Antwort

1

können Sie dies versuchen;

awk -F '|' -v fields=13 '{c+=NF; s=(s?s OFS:"") $0} c>=fields{print s; s=""; c=0}' yourfile.csv 


[email protected]:/tmp$cat test 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11 
|12|13 
1|2|3|4|5|6|7|8|9|10| 
11|12|13 


[email protected]:/tmp$ awk -F"|" -v fields=13 '{f+=NF; str=(str?str OFS:"") $0} f>=fields{print str; str=""; f=0}' test 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11|12|13 
1|2|3|4|5|6|7|8|9|10|11 |12|13 
1|2|3|4|5|6|7|8|9|10| 11|12|13 
+0

In dieser Zeichenfolge ist kein Zeilenvorschubzeichen vorhanden. Probieren Sie es mit 'echo -e' aus. – Kusalananda