从给定目录中,我使用以下命令列出所有文件和目录。
`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。
答案 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
开头的行,然后我们将空格压缩到一个空格中,然后我们获取结果的特定列。