Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 按时间范围过滤出HDFS中的文件_Bash_Hdfs_Awk - Fatal编程技术网

Bash 按时间范围过滤出HDFS中的文件

Bash 按时间范围过滤出HDFS中的文件,bash,hdfs,awk,Bash,Hdfs,Awk,我有一个HDFS中的文件列表,必须通过bash脚本过滤掉最近n小时的文件 $ find . -name "*" -type f \ -newermt "2019-09-22 23:59:59" \ ! -newermt "2019-09-23 23:59:59" \ -exec ls -lt --time-style=long-iso {} + 已尝试但仍停留在日期级别过滤无法继续 预计将过滤掉HDFS中

我有一个HDFS中的文件列表,必须通过bash脚本过滤掉最近n小时的文件

$ find . -name "*" -type f                  \
    -newermt "2019-09-22 23:59:59"          \
    ! -newermt "2019-09-23 23:59:59"        \
    -exec ls -lt --time-style=long-iso {} +
已尝试但仍停留在日期级别过滤无法继续

预计将过滤掉HDFS中一天中任意n小时的文件

这是对以下内容的改编:

注意:我无法对此进行测试,但您可以通过查看输出一步一步地进行测试:

通常我会说,但是对于Hadoop,您没有选择余地,因为这里没有与
find
等价的东西。(从2.7.0开始有一个查找,但根据

步骤1:递归
ls

$ hadoop fs -ls -R /path/to/folder/
步骤2:仅用于拾取文件。目录是通过其以
d
开头的权限来识别的,因此我们必须排除这些权限

$ hadoop fs -ls -R /path/to/folder/ | awk '!/^d/'
请确保你没有在这里结束有趣的行是空的或只是目录名

步骤3:用于处理时间间隔并选择目录。我假设您有任何标准的awk,所以我不会使用GNU扩展。Hadoop将时间格式输出为
yyyy-MM-dd HH:MM
。此格式可以排序,并位于字段6和7中。下面的示例过滤掉“2019-09-21 22:00”和“2019-09-21 23:00”之间的所有文件:

$hadoop fs-ls-R/path/to/folder/\
|awk-v tStart=“2019-09-21 22:00”-v tEnd=“2019-09-21 23:00”\

“(!/^d/)&&($6”“$7>=tStart)和($6”“$7”)此答案可能会有所帮助:最后一个表达式缺少一些引语:”(!/^d/)&&($6”“$7>=tStart)和($6”“$7”)
$ hadoop fs -ls -R /path/to/folder/  \
   | awk -v tStart="2019-09-21 22:00" -v tEnd="2019-09-21 23:00" \
         '(!/^d/) && (($6" "$7) >= tStart) && (($6" "$7") <= tEnd)'