2016-08-02 2 views
2

У меня есть куча csv-файлов, поступающих в виде ежедневного фида из какой-либо другой системы.удаление заголовков и пустых строк из файла csv

Мне нужно удалить заголовок и некоторые необязательно представить пустые строки из файлов, прежде чем загружать их на HDFS и создавать поверх него внешнюю таблицу.

В настоящее время у меня есть два процесса шага, который работает, чтобы удалить заголовок и пустое пространство, прежде чем положить файл на HDFS

//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/ 

Есть ли способ, я могу объединить два шага без создания каких-либо временных файлов?

ответ

3

Вы можете комбинировать, как это:

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

Thanks heaps @sat !! –

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

должны также делать будет создана работа и резервное копирование с file.csv.bak.

Что это все?

  • 1! процесс следующие команды, за исключением по линии 1. ! отрицание.
  • /^$/ проверяет пустую строку.
  • !p, который следует за проверкой шаблона выше, напечатает строку, если она не пуста из-за отрицания (!).
  • -i или опция редактирования inplace гарантирует, что изменения будут непосредственно отражены в файле.
+0

не могли бы вы объяснить, что делает часть 1! {/^$ /! P}? –

+1

@VikasSaxena: См. Редактирование. – sjsam

+1

Большое спасибо. Я ценю усилия! Это на самом деле другое решение для моей проблемы! –

Смежные вопросы