2016-08-02 6 views
2

Ich habe eine Reihe von CSV-Dateien in Form eines täglichen Feed von einem anderen System kommen.Entfernen von Header und Leerzeilen aus einer CSV-Datei

Ich muss die Kopfzeile und einige optional vorhandene Leerzeilen aus den Dateien entfernen, bevor Sie sie auf HDFS laden und eine externe Tabelle darüber erstellen.

Zur Zeit habe ich einen zweistufigen Prozess, der den Header und Leerzeichen entfernen funktioniert, bevor die Datei auf HDFS setzen

//remove blank lines 
sed -i '/^\s*$/d' file_20160802.csv 

//remove header 
sed -i 1d file_20160802.csv 

//put file on HDFS 
hdfs dfs -put file_20160802.csv /raw/abc/20160802/ 

Gibt es eine Weise, die ich die beiden Schritte ohne die Erstellung alle temporären Dateien kombinieren?

Antwort

3

können Sie wie folgt kombinieren:

sed -i '1d; /^\s*$/d' file 
+1

Vielen Dank @sat !! –

3
sed -ni.bak '1!{/^$/!p}' file.csv 

auch die Arbeit machen sollte und ein Backup mit file.csv.bak erstellt.

Worum geht es?

  • 1! Verfahren die folgenden Befehle mit Ausnahme von Zeile 1 ! Negation ist.
  • /^$/ prüft auf eine leere Zeile.
  • !p was der obigen Musterprüfung folgt, würde die Zeile drucken, wenn sie wegen der Negation nicht leer ist (!).
  • Die -i oder die Inplace-Bearbeitungsoption stellt sicher, dass Änderungen direkt in der Datei wiedergegeben werden.
+0

Kannst du bitte erklären, was der 1! {/^$ /! P} -Teil tut? –

+1

@VikasSaxena: Bitte beachten Sie die Änderung. – sjsam

+1

Vielen Dank. Ich schätze die Mühe !! Dies ist in der Tat eine andere Lösung für mein Problem! –

Verwandte Themen