2017-10-10 221 views
1

我想用下面的格式与当前日期比较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脚本可以在这里使用。

+0

你好,你想要什么样的比较作出的,什么是你想要的结果,有什么标志要涨到做。 –

+0

我有一个数据的文件,如果有一个字段与上述格式的日期。我想比较当前日期和文件中的日期,并将包含7天以前日期的行重定向到一个新文件中。 ' – ninja67

+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 [email protected] 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 [email protected] 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月5日和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 
+0

该文件包含的细节象下面这样: 'code' asdffsdvdsds,sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日11:04 asdffsdvdsds,sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日11:04 asdffsdvdsds, sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日上午11点04 'code' 同样,当前代码给出了下面的错误: 日期:无效日期 bash中:行0:[::整数表达预期 – ninja67

+0

@ ninja67你检查了你正在运行的日期命令吗?执行'man date | tail -n 1' –

+0

@ ninja67我已经扩展了我的答案来处理两个日期命令。如果你仍然有问题,请看看并告诉我。 –