利用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

相關文章
相關標籤/搜索