利用grep和awk命令完成hadoop fs -get的同时排除指定文件或文件夹

1.需求背景

工做中有些需求须要从Hadoop HDFS上把数据拉倒本地,不少时候咱们的需求都是要在get一部分文件的同时并排除掉指定文件。好比下图,我要在get下列csv的同时排除掉指定的engineerParameter.csv,那我又不想一个个get这些csv。web

2.实现命令

这个时候grep和awk命令就派上场了,以下oop

hadoop fs –ls GivenPath | grep –v CertianExcludeFile | awk 'BEGIN{FL=""}{FL=FL" "$8} END{system("hadoop fs -get "FL" .")}'3d

3.命令解析

这里简单分段解析下这行命令:orm

(1) hadoop fs –ls GivenPath:列出指定HDFS目录下的文件信息cdn

(2) grep –v CertianExcludeFile:方向匹配不包含指定名称或者通配字符串的文件名blog

(3) BEGIN{FL=""}{FL=FL" "$8}:取ls后列出的文件包含路径的文件名信息及将其连同空格符拼接成一个字符串。ip

(4) END{system("hadoop fs -get "FL" .")}:将上步得到的字符串get到当前目录。hadoop

4.think a bit more

引伸思考下,那若是我想排除多个指定文件怎么办呢?字符串

能够再加一个grep –v 以下图:get

相关文章
相关标签/搜索