如何分隔文件和目录以便我可以对文件执行某些操作/处理?

时间:2015-04-10 08:51:25

标签: shell hadoop awk hdfs

从给定目录中,我使用以下命令列出所有文件和目录。

`hadoop dfs -lsr <path to hdfs directory>`

此列表文件和目录

drwxrwxrwx   - root xyz          0 2014-10-09 18:39 <path to directory>
-rw-rw-rw-   3 root xyz  133998512 2015-04-08 03:36 <path to file>

我想有一个脚本来获取这些输出并仅过滤文件路径。我相信只看每行的第一个字符就足够了 drwxrwxrwx和-rw-rw-rw-但我不知道如何为它编写脚本。可能我需要学习awk。

2 个答案:

答案 0 :(得分:2)

是的,您可以使用AWK。

 hadoop dfs -lsr <path to hdfs directory> | awk '{ if($1 !~ /d.*/) { print $0; } }'

<强>说明:    AWK将输入流分为列。列的编号为1到$ NF,即字段数。

$ 1表示第一列 - drwxrwxrwx thingy。此代码测试第一列是否以“&#39;”开头。如果它不是以&#39; d开头,则进入该块并打印整行。 ($ 0用于表示整行,而$ 1,$ 2等表示行中的列。)

编辑:如果您只想打印文件名,请替换&#34; print $ 0;&#34;用&#34;打印$ NF;&#34;

答案 1 :(得分:0)

如果您想以分布式方式进行处理,可能需要查看hadoop streaming

如果您真的只想查找文件,并且您的hadoop版本是&gt; = 2.7(目前尚未发布),您可以使用find。根据{{​​3}}问题,该功能已在版本2.7.0中添加。

另一种选择是使用已提供的awk解决方案或grep

hadoop dfs -lsr <path to hdfs directory> | grep -v '^d'

或者只获取文件名:

hadoop dfs -lsr <path to hdfs directory> | grep -v '^d' | tr -s ' ' | cut -f 8 -d ' '

这里我们只选择以d开头的行,然后我们将空格压缩到一个空格中,然后我们获取结果的特定列。