The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Преобразование формата даты с помощью date в bash-скрипте"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Системное и пользовательское ПО / Linux)
Изначальное сообщение [ Отслеживать ]

"Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от stakado email(ok) on 18-Янв-13, 09:09 
Драсьте!
Есть небольшой баш-скрипт, который читает лог сквида, выбирает оттуда нужные строки (по IP клиента) и выводит на экран.
В конфиге сквида стоит emulate_httpd_log=off, оттого даты отображаются в эпохальном формате.
Пытаюсь их преобразовать в хуман-ридэйбл формат с помощью date в баш-скрипте. И вот в этом скрипте у меня и возникает проблема.
При исполнении скрипта баш выдает мне ошибку:
./date.sh: line 21: date -d 70-1-1 + 1358484389.067 sec: command not found
Если же я скопирую написанную выше строку и вставлю в командную строку, то date вернёт мне нормальный результат. Получается, что я как-то не так вызываю этот самый date из скрипта. Вот кусок скрипта: (хочу сразу сказать, что скрипт делается для разового использования, оттого красоты и аккуратности в нем нет)
        temp=`tail -n $1 $log | grep --color -w $str`
        dt=`echo "$temp" | awk '{ print $1 }'`
        IFS=$'\n'
        dt=($dt)
        IFS=$' \t\n'
        i=0
        while [ "${dt[$i]}" ]; do
                date -d 70-1-1 + ${dt[$i]} sec
                i=$[ $i + 1 ]
        done
Подскажите, плиз, чё тут поправить, шобы дата таки конвертилась.

И ещё маленький вопросик - почему-то date возвращает дату на 4 часа меньше настоящей (но в целом это не проблема, можно просто прибавить 4 часа к дате и она станет верной)

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от Pahanivo (ok) on 18-Янв-13, 09:28 
укажи полный путь к date
exmpl: /bin/date
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от stakado email(ok) on 18-Янв-13, 09:45 
> укажи полный путь к date
> exmpl: /bin/date

Спасибо!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от Дум Дум on 18-Янв-13, 09:54 
> 4 часа

Пояс GMT+4?...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от stakado email(ok) on 18-Янв-13, 10:59 
>> 4 часа
> Пояс GMT+4?...

да да...
добавляем к date + gmt0 и время становица верным

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Преобразование формата даты с помощью date в bash-скрипте"  +/
Сообщение от Andrey Mitrofanov on 21-Янв-13, 21:42 
> Пытаюсь их преобразовать в хуман-ридэйбл формат с помощью date в баш-скрипте. И

Я сегодня добрый!

$ tail -1 access.log
1358789614.836   1906 127.0.0.1 TCP_REFRESH_MISS/200 259343 GET http://planet.чего.то.там
$ tail -1 access.log |awk -F. -v OFS=. '{$1=strftime("%FT%T",$1);print}'
2013-01-21T21:33:34.836   1906 127.0.0.1 TCP_REFRESH_MISS/200 259343 GET http://planet.чего.то.там
$ date -d @1358789614 +%FT%T
2013-01-21T21:33:34


> И ещё маленький вопросик - почему-то date возвращает дату на 4 часа
> меньше настоящей (но в целом это не проблема, можно просто прибавить
> 4 часа к дате и она станет верной)

Таймзону настрой, кипятильник!

$ TZ=UTC date -d @1358789614 +%FT%T
2013-01-21T17:33:34

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру