通过shell脚本比较日期

时间:2013-05-14 14:35:43

标签: shell date

我有这样的文字:

aaaaaaaaaaaaaaaaaaaaddddd
sadasdafnsdfoisjhpfnsf
dasnfdfmsdf until: Thu Apr 29 19:41:02 EEST 2021 dasd
asdasmda[mfiun[hg[sm df,
dfmsdf[ismdfsdfsd,flsdfsdf******************

我必须从文本中解析一个日期,然后我必须将它与今天进行比较,如果它做得更好,否则我必须做其他事情,我必须用shell脚本写它但我现在不用非常好。有人能举例说明如何做到这一点。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我会分两步完成。 (它可以在一个完成):

1,获取日期字符串 2,做比较

e.g:

 kent$  d=$(echo "aaaaaaaaaaaaaaaaaaaaddddd
sadasdafnsdfoisjhpfnsf
dasnfdfmsdf until: Thu Apr 29 19:41:02 EEST 2021 dasd
asdasmda[mfiun[hg[sm df,
dfmsdf[ismdfsdfsd,flsdfsdf******************"|grep -o '[A-Z].*[0-9]')

检查var d:

kent$  echo $d
Thu Apr 29 19:41:02 EEST 2021

现在我们将此日期与今天进行比较。我们需要将两个日期转换为秒来进行比较:

kent$  echo $(($(date -d"${d}" +%s)-$(date +%s)))
251171977

我打印出上述命令的结果。在您的情况下,您可以将其分配给var。或者直接检查结果。如果> 0表示将来文本中的日期。否则,它是过去的(或与今天相同)。

修改

一些数学:

使用int:

kent$  echo $((251171977/(3600*24)))
2907

精确:

kent$  echo "scale=2;251171977/(3600*24)"|bc 
2907.08
更准确地说:

kent$  echo "scale=7;251171977/(3600*24)"|bc                                                                                                                                
2907.0830671

答案 1 :(得分:1)

如果可能,请以易于解析的形式打印日期。即。

`echo "the day of the year is `date '+%j'`"`

这使得比较更容易。