我正在查看 Hadoop 文件系统。通过命令
hadoop fs -ls /path/to/dir1*
我将查看以
dir1
开头的每个目录并返回其文件
输出将类似于
Found 1 items
-rw-r--r-- 3 sys_blah_blah moredate /path/to/dir10/file1.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah moredate /path/to/dir10/file2.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah moredate /path/to/dir10/file3.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah moredate /path/to/dir11/file1.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah moredate /path/to/dir11/file2.py
...
我唯一感兴趣的信息是文件部分的路径。如何仅将路径存储到另一个文件中?理想情况下,我想要一个仅包含该文件内路径的文件的输出。
最初,我考虑运行命令并将其输出存储到文件中,然后解析新文件并使用正则表达式获取路径并将它们放入新文件中,但这似乎没有必要。
您可以在这里使用
grep
,因为hadoop fs -ls
几乎不提供任何有用的选项。
hadoop fs -ls /path/to/dir1* | grep -oE "/(.*/)?" > outFile.dat
如果每条路径只需要一个条目,只需将其传递给
uniq
。例如:
hadoop fs -ls /path/to/dir1* | grep -oE "/(.*/)?" | uniq > outFile.dat
看起来很简单。
我不太明白你的问题,但类似的事情应该可以让你开始
while read prot digit user group fn; do
echo $(dirname "$fn")
done < <(hadoop fs -ls /path/to/dir1*)
Hadoop 文件系统 API (org.apache.hadoop.fs) 可用于从 Java(任何其他兼容语言)检索 HDFS 数据,并可以完成后续操作(正则表达式)。