Bash 按时间范围过滤出HDFS中的文件
我有一个HDFS中的文件列表,必须通过bash脚本过滤掉最近n小时的文件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中
$ 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)'