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

工作中有些需求需要从Hadoop HDFS上把数据拉倒本地,很多时候我们的需求都是要在get一部分文件的同时并排除掉指定文件。比如下图,我要在get下列csv的同时排除掉指定的engineerParameter.csv,那我又不想一个个get这些csv。这个时候grep和awk命令就派上场了,如下

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

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

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

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

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

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

引申思考下,那如果我想排除多个指定文件怎么办呢?

可以再加一个grep –v 如下图:

你可能感兴趣的:(hadoop,linux,shell)