Если у вас есть GNU AWK, вы можете использовать это:
| gawk '{t=mktime(gensub(/[-:]/," ","g")); print strftime("%Y-%m-%d %H:%M:%S",int(t/5)*5);}'
Здесь используется функция int()
, которая усекает, что означает «округление вниз».Если вы решите, что предпочтете «округлить» (т. Е. Перейти к «ближайшему» 5-секундному приращению), замените int(t/5)
на int((t+2.5)/5)
.
Конечно, если вы чувствуете мазохизм, выможет сделать это в чистой оболочке.Это только усечения, а не округление.
[ghoti@pc ~]$ fmt="%Y-%m-%d %H:%M:%S"
[ghoti@pc ~]$ date "+$fmt"
2012-03-15 07:53:37
[ghoti@pc ~]$ date "+$fmt" | while read date; do stamp="`date -jf \"$fmt\" \"$date\" '+%s'`"; date -r `dc -e "$stamp 5/ 5* p"` "+$fmt"; done
2012-03-15 07:53:35
Обратите внимание, что я использую FreeBSD.Если вы используете Linux, то вам может понадобиться использовать разные опции для команды date
(в частности, опции -r и -f, я думаю).Я запускаю это в bash, но оно должно работать в чистой оболочке Bourne, если это то, что вам нужно.