我有一堆csv文件来自其他系统的每日Feed。
在将文件加载到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/
有没有办法可以在不创建任何临时文件的情况下组合这两个步骤?
答案 0 :(得分:3)
你可以这样组合:
sed -i '1d; /^\s*$/d' file
答案 1 :(得分:3)
sed -ni.bak '1!{/^$/!p}' file.csv
也应该完成这项工作,并且会创建file.csv.bak
的备份。
这是怎么回事?
1!
处理以下命令,但第1行除外。!
为否定。/^$/
检查空行。!p
将打印该行,如果由于否定(!
)而不为空。-i
或就地编辑选项可确保更改直接反映在文件中。