powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Работа с датой/временем в shell
13 сообщений из 13, страница 1 из 1
Работа с датой/временем в shell
    #37416591
Chitago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет,

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

- сместить TZ на нужное количество часов
- вывести дату в нужном формате
- найти нужную строку в логе
- от нее уже читать вниз
...
Рейтинг: 0 / 0
Работа с датой/временем в shell
    #37419988
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man grep
...
Рейтинг: 0 / 0
Работа с датой/временем в shell
    #37426752
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Работа с датой/временем в shell
    #37426771
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть
while [ $I -lt $NUMBER_ROWS ]
...
Рейтинг: 0 / 0
Работа с датой/временем в shell
    #37426816
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затупил. Второй цикл можно вообще заменить сразу командой tail > файл.
...
Рейтинг: 0 / 0
Работа с датой/временем в shell
    #37426855
Ихтиандр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а моя рекомендация для того чтобы не за сегодня а с позавчера например выбирать.
...
Рейтинг: 0 / 0
Работа с датой/временем в shell
    #37426952
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
позавчера 20110906120000 - 02000000 = 20110904120000

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

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

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

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


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


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