Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Работа с датой/временем в shell / 13 сообщений из 13, страница 1 из 1
29.08.2011, 18:43
    #37416591
Chitago
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
Привет,

есть лог файл в котором все записи начинаются с даты/времени в таком формате: yyyymmddhh24miss (20110829184035, например).
Можно ли как-нить только с помощью shell получить все записи за последнюю неделю, день, или 3 часа - в общем любой необходимый интервал?
...
Рейтинг: 0 / 0
29.08.2011, 19:08
    #37416619
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
Мой рецепт:

- сместить TZ на нужное количество часов
- вывести дату в нужном формате
- найти нужную строку в логе
- от нее уже читать вниз
...
Рейтинг: 0 / 0
31.08.2011, 20:34
    #37419988
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
man grep
...
Рейтинг: 0 / 0
06.09.2011, 12:28
    #37426752
init01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
YESTERDATA= задаём дату в формате : `date +%Y%m%d%H%M%S`
NUMBER_ROWS=`cat /путь/файл.log | wc -l`
 (узнаём количество строк) 
I=0
CURRENT_ROW=`head -n $I /путь/файл.log | tail -1`
 (читаем первую строку) 
 while [ $CURRENT_ROW -lt $YESTERDATA ] 
  (сравниваем строку с необходимой датой) 
  do
   I=`expr ${I} + 1`
  done;
 (как только доходим до нужной даты выходим из цикла) 
I=`expr ${I} - 1`
 (возвращаемся к нужной строке) 
 while [ $I -lt $CURRENT_ROW ] 
 (создаём цикл, который будет действовать до последней строки) 
  do
   `head -n $I /путь/файл.log | tail -1` >> нужный_файл.txt
   (построчно копируем в другой файл) 
   I=`expr ${I} + 1`
  done;
...
Рейтинг: 0 / 0
06.09.2011, 12:36
    #37426771
init01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
то есть
while [ $I -lt $NUMBER_ROWS ]
...
Рейтинг: 0 / 0
06.09.2011, 12:50
    #37426816
init01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
Затупил. Второй цикл можно вообще заменить сразу командой tail > файл.
...
Рейтинг: 0 / 0
06.09.2011, 13:06
    #37426855
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
а моя рекомендация для того чтобы не за сегодня а с позавчера например выбирать.
...
Рейтинг: 0 / 0
06.09.2011, 13:37
    #37426952
init01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
позавчера 20110906120000 - 02000000 = 20110904120000

переход с месяца на месяц - нужно написать ещё пару-тройку циклов
...
Рейтинг: 0 / 0
06.09.2011, 19:13
    #37427865
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
зачем?
если можно посчитать смещение TZ в часах и вывести дату и время в нужном формате вплоть до минуты с которых и осуществлять поиск хвоста
...
Рейтинг: 0 / 0
07.09.2011, 13:19
    #37428880
init01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
Можно и так.
Но автору видимо нужны не рекомендации, а готовые решения.

К тому же Ваши смещения не дадут результата, если мне 1 сентября надо найти данные за 30 августа. Всё равно нужен цикл или if для проверки некоторых условий.
...
Рейтинг: 0 / 0
07.09.2011, 16:19
    #37429361
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
В первом посте задача поставлена однозначно
...
Рейтинг: 0 / 0
07.09.2011, 18:15
    #37429621
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
ИхтиандрВ первом посте задача поставлена однозначно

Но решение будет не эффективным.

Для эффективного решения нужно использовать что то
позволяющее переводить дату в формате файла в секунды от начала эпохи и обратно.


например
man 3 ctimeThe mktime() function modifies the fields of the tm structure as fol-
lows: tm_wday and tm_yday are set to values determined from the con-
tents of the other fields; if structure members are outside their valid
interval, they will be normalized (so that, for example, 40 October is
changed into 9 November); tm_isdst is set (regardless of its initial
value) to a positive value or to 0, respectively, to indicate whether
DST is or is not in effect at the specified time. Calling mktime()
also sets the external variable tzname with information about the cur-
rent timezone.



В шелах такой фичи не нашел.
...
Рейтинг: 0 / 0
08.09.2011, 09:25
    #37430114
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой/временем в shell
остается наверное только перл учить :)
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Работа с датой/временем в shell / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]