我有2个文件的时间戳格式为MMDDYYYY-HHMMSS
。
例如。 04192012-000623
和04192012-000854
。
我需要能够在2秒内找到2之间的差异。
要检查的特殊情况
04172012-115500
& 04182012-000200
。我正在运行ksh而无法访问date -d
标志。任何人都可以指出我如何shell脚本这个正确的方向? (它将成为更大的shell脚本的一部分,所以请不要使用其他语言)
这适用于solaris和linux ksh。提前谢谢。
答案 0 :(得分:0)
作为首发(来自我上面提供的链接):
#! /usr/bin/ksh
echo enter first time stamp
read TIME1
echo enter second time stamp
read TIME2
H1=${TIME1%:+([0-9])}
M1=${TIME1#+([0-9]):}
H2=${TIME2%:+([0-9])}
M2=${TIME2#+([0-9]):}
H1=${H1#0}
M1=${M1#0}
H2=${H2#0}
M2=${M2#0}
((MAM1=H1*60+M1))
((MAM2=H2*60+M2))
((MAM1>MAM2)) && ((MAM2=MAM2+1440))
((diff=MAM2-MAM1))
echo diff = $diff
exit 0
$ ./timestamp
enter first time stamp
17:30
enter second time stamp
18:05
diff = 35
$ ./timestamp
enter first time stamp
23:59
enter second time stamp
00:01
diff = 2
$
答案 1 :(得分:0)
如果这只是为了好玩,祝你好运:)。如果它是出于实际目的,请参阅How to get the difference between now and a different date (in minutes) using ksh (or another shell script)?处的strptime
包装器,它应该很容易适应。
答案 2 :(得分:0)
此解决方案使用gnu-date和bashisms,因为我不知道ksh。
d1=04192012-000623
dd1="${d1:4:4}/${d1:0:2}/${d1:2:2} ${d1:9:2}:${d1:11:2}:${d1:13:2}"
d1=04192012-000854
dd2="${d1:4:4}/${d1:0:2}/${d1:2:2} ${d1:9:2}:${d1:11:2}:${d1:13:2}"
echo $(($(date -d "$dd1" +%s) - $(date -d "$dd2" +%s)))
也许$ {var:from:len}在ksh中不可用于从字符串中剪切部分,然后你必须用其他东西替换它,也许是sed。
答案 3 :(得分:0)
stat -c后跟以下
之一 %X time of last access, seconds since Epoch
%Y time of last data modification, seconds since Epoch
%Z time of last status change, seconds since Epoch