在bash中计算日期

时间:2011-09-22 07:33:50

标签: shell unix date

我的文件中写满了这种格式的日期(2002-09-26 02:20:30), 我想提取文件末尾的最后5天,这是我写的

 END-DATE=tail -1 my file (which is 2002-09-26 02:20:30)
 time=$(expr 60 * 60 * 24 * 5) ( counting 5days which is 432000) 
 up to know every thing is ok ! the problem is with next line, 
 START-DATE=`expr END-DATE - time`

似乎错了:expr: non-numeric argument

我应该如何将此时间转换为纪元时间?

4 个答案:

答案 0 :(得分:1)

EDATE未定义,也许您输错了,它应该是END-DATE

答案 1 :(得分:1)

你需要参考变量,EDATE vs $ EDATE(你真的是指END-DATE吗?)

START_DATE=`expr $EDATE - time`

(请注意,您不能使用-in shell变量名,因此START-DATE和END-DATE无效。请将它们命名为START_DATE和END_DATE)

答案 2 :(得分:1)

如果您只想在给定时间戳之前5天获得日期并安装GNU Coreutils,则可以使用date -d "$(tail -n 1 some/file.ext) 5 days ago";如果您希望采用特定格式,请尝试查看手册页date(1)(即输入man 1 date)。

答案 3 :(得分:0)

我已经写了一堆工具(dateutils)来解决这些问题,特别是dgrep可能会有所帮助:

脱下袖口,我会去

EDATE=$(tail -n1 MY_FILE)
THRES=$(dadd "${EDATE}" -5d)
dgrep ">=${THRES}" < MY_FILE