расчет дат в баш - PullRequest
       2

расчет дат в баш

1 голос
/ 22 сентября 2011

У меня есть файл с датами в этом формате (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 ]

1 голос
/ 22 сентября 2011

Вам нужно обратиться к переменной EDATE против $ EDATE (вы действительно имели в виду END-DATE?)

START_DATE=`expr $EDATE - time`

(Обратите внимание, что вы не можете иметь - в именах переменных оболочки, поэтому START-DATE и END-DATE недопустимы. Назовите их START_DATE и скорее END_DATE)

1 голос
/ 22 сентября 2011

Если вам просто нужна дата за 5 дней до заданной отметки времени и установлена ​​GNU Coreutils, вы можете использовать date -d "$(tail -n 1 some/file.ext) 5 days ago";если вы хотите это в определенном формате, попробуйте просмотреть справочную страницу date(1) (то есть введите man 1 date).

1 голос
/ 22 сентября 2011

EDATE не определено, может быть, вы сделали опечатку и должно быть END-DATE?

0 голосов
/ 10 апреля 2012

Я написал кучу инструментов ( dateutils ) для решения именно таких проблем, в частности dgrep может помочь:

С манжеты, я бы пошелдля

EDATE=$(tail -n1 MY_FILE)
THRES=$(dadd "${EDATE}" -5d)
dgrep ">=${THRES}" < MY_FILE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...