格式的日期比较

时间:2017-10-10 05:43:10

标签: shell unix awk awk-formatting

我想将shell脚本中的日期与下面的格式与当前日期进行比较,并返回一些标记。

 Sep 15 2017 11:04AM

 Sep 16 2017 10:07AM

 Sep 19 2017 11:44AM

 Sep 20 2017 10:08AM

 Sep 21 2017 10:03AM

这里可以使用Awk脚本。

1 个答案:

答案 0 :(得分:0)

假设包含日期的文件如下所示:

$ cat file1
Sep 15 2017 11:04AM
Sep 16 2017 10:07AM
Sep 19 2017 11:44AM
Sep 20 2017 10:08AM
Sep 21 2017 10:03AM
Oct 02 2017 10:03AM
Oct 05 2017 10:03AM
Oct 07 2017 10:03AM

将此用于GNU日期

cat file1 | xargs -I@ bash -c " \
    seven_days_ago=$(date --date='7 days ago' +%s); \
    input=\$(date --date=\"@\" +%s); \
     if [ \"\$seven_days_ago\" -gt \"\$input\" ]; then \
        echo \"@\"; \
     fi;"

这适用于BSD日期

cat file1 | xargs -I@ bash -c " \
    seven_days_ago=$(date -v-7d +%s); \
    input=\$(date -j -f \"%b %d %Y %R%p\" \"@\" +%s); \
     if [ \"\$seven_days_ago\" -gt \"\$input\" ]; then \
        echo \"@\"; \
     fi;"

输出如下。这使得10月05日和07日的日期减少了7天。

Sep 15 2017 11:04AM
Sep 16 2017 10:07AM
Sep 19 2017 11:44AM
Sep 20 2017 10:08AM
Sep 21 2017 10:03AM
Oct 02 2017 10:03AM

您如何区分GNU日期和BSD日期?

检查执行:

$ man date  | tail -n 1
GNU coreutils 8.22 

VS

$ man date | tail -n 1
BSD                             August 16, 2007                            BSD