首页 > 解决方案 > 如何使用 awk 解决日期过滤器的问题

问题描述

我想过滤一些文件的日期(我不能使用 find,因为这些文件在 HDFS 中)。我找到的解决方案是使用 awk。

这是我要处理的数据示例

drwxrwx--x+  - hive     hive                  0 2019-01-01 20:02 /dat1
drwxrwx--x+  - hive     hive                  0 2019-01-02 16:38 /dat2
drwxrwx--x+  - hive     hive                  0 2019-01-03 16:59 /dat3

如果我使用这个命令:

$ ls -l |awk '$6 > "2019-01-02"'
drwxrwx--x+  - hive     hive                  0 2019-01-03 16:59 /dat3

我没有任何问题,但是如果我想创建一个脚本来帮助我在 2 天前进行过滤,我在 awk 中添加了表达式:

$ date +%Y-%m-%d --date='-2 day'
2019-01-02

它是这样的,但不起作用:

ls -l |awk '$6 >" date +%Y-%m-%d --date=\'-2 day\'"'   
>

好像少了点什么,但不知道是什么。

标签: awkhdfs

解决方案


首先,永远不要尝试解析ls.

如果您想掌握最长n天数的文件/目录,这些文件/目录位于目录中/path/to/dir/

$ find /path/to/dir -type f -mtime -2 -print
$ find /path/to/dir -type d -mtime -2 -print

第一个用于文件,第二个用于目录。

如果你仍然想用 ls 解析awk,你可以尝试这样的事情:

$ ls -l | awk -v d=$(date -d "2 days ago" "+%F") '$6 > d'

您遇到的问题是您将双引号嵌套到单引号中。


推荐阅读