【发布时间】:2021-07-20 09:45:28
【问题描述】:
我想把HDFS的目录名和awk结合起来。这可行吗?目录名,而不是文件名。 这是我在本地的 awk 工作正常:
awk 'NR <= 1000 && FNR == 1{print FILENAME}' ./*
然后我想将它与 hadoop fs -ls 结合起来,如下所示:
hadoop fs -ls xxx/* | xargs awk 'NR <= 1000 && FNR == 1{print FILENAME}'
但是告诉我:awk: cmd. line:2: 致命:无法打开文件 `-rwxrwxrwx' 进行读取(没有这样的文件或目录)
我也试过这样的:
awk 'NR <= 1000 && FNR == 1{print FILENAME}' < hadoop fs -ls xxx/*
awk 'NR <= 1000 && FNR == 1{print FILENAME}' < $(hadoop fs -ls xxx/*)
awk 'NR <= 1000 && FNR == 1{print FILENAME}' $(hadoop fs -ls xxx/*)
这些都失败了,毫不奇怪,我认为目录中的 awk 执行文件需要读取每个文件,而不是像文件的内容那样可以将其作为流传递给 awk。我对吗?谁能给我一个可行的解决方案来做到这一点?谢谢,提前。
【问题讨论】:
-
你能试试这个吗?
awk 'NR <= 1000 && FNR == 1{print FILENAME}' <(hadoop fs -ls xxx/*) -
hadoop fs -ls xxx/*的输出是什么? -
如何仅列出 HDFS 中的文件名 stackoverflow.com/questions/21569172/…,尤其是这看起来很有希望:stackoverflow.com/a/38740023/4162356
-
@BarathVutukuri 显示 /dev/fd/63 不起作用
-
我明白了。您得到的错误意味着
hadoop fs -ls输出的文件信息不仅仅是名称,因此您需要摆脱那些额外的输出。我无法确定,因为您没有显示命令的实际输出,因此我只能提供解决问题的指针。祝你好运!