Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Unix time  (Прочитано 873 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zu11u

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Unix time
« : 31 Май 2011, 14:56:53 »
Добрый день,

есть лог файлы ULOG-acctd
первой колонкой идёт время в unix формате
-----
1306715924   92.126.12.203   192.168.0.5   648
1306715944   76.108.242.145   192.168.0.5   345
1306715923   67.60.20.178   192.168.0.5   507
1306715951   178.75.78.178   192.168.0.5   620
1306715935   99.247.98.46   192.168.0.5   379
-----


посмотреть единичные записи командой date -d @1306715935 не составляет труда, но если нужно быстро перепрыгнуть в логе на нужное время, то это слегка проблематично.

Посоветуйте пожалуйста скрип желательно в баше что бы конвертировать всё это безобразие в приличный вид.

andrey_p

  • Гость
Re: Unix time
« Ответ #1 : 31 Май 2011, 15:50:39 »
cat log | while read a b; do
  echo `date  -d @$a --rfc-3339=date` $b
done

Спецификация вывода по вкусу

Оффлайн zu11u

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Unix time
« Ответ #2 : 31 Май 2011, 15:59:20 »
огромное спасибо
прекрасно работает

#!/bin/sh
log_file=$1
cat ${log_file} | while read a b; do
  echo `date  -d @$a --rfc-3339=date` $b
done

andrey_p

  • Гость
Re: Unix time
« Ответ #3 : 31 Май 2011, 16:24:24 »
Ну за спасибо, да еще и огромное несколько познавательных советов  :):

- просто имена переменных необходимо включать в фигурные скобки,только если сразу за именем переменной идет буква, цифра или знак подчеркивания (допустим find . -name '${f}txt')

- здесь вообще не нужно присваивать имя - можно сразу работать с $1.

- а вот спецификацию можно присвоить переменной - для более удобного изменения.

- я не поставил скобки вокруг $b - "сплющиваются" строки логов.

- конструкция cat file | называют catism - она не нужна и даже вредна (замедляет), но читабельна, поэтому часто используется (и мной для ответов).

В общем небольшой рефакторинг:

#!/bin/sh

specification='--rfc-3339=date'

while read a b; do
  echo `date  -d @$a $specification` "$b"
done <$1

Оффлайн zu11u

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Unix time
« Ответ #4 : 01 Июнь 2011, 08:06:42 »
Ещё раз спасибо )

оставил в таком виде )))

#!/bin/sh

while read a b; do
  echo `date  -d @$a "+%d.%m %k:%M"` "$b"
done <$1 >$2
« Последнее редактирование: 01 Июнь 2011, 10:26:51 от zu11u »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Unix time
« Ответ #5 : 02 Июнь 2011, 07:26:22 »
оставил в таком виде )))
Код: Text
  1. #!/bin/sh
  2. while read a b; do
  3.   echo `date  -d @$a "+%d.%m %k:%M"` "$b"
  4. done <$1 >$2
А если убрать перенаправления <$1 >$2, то можно будет использовать этот скрипт как фильтр:
cat logfile.log | grep чего-нибудь | unix2time | less
или типа того :)
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн zu11u

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Unix time
« Ответ #6 : 02 Июнь 2011, 13:23:03 »
оставил в таком виде )))
Код: Text
  1. #!/bin/sh
  2. while read a b; do
  3.   echo `date  -d @$a "+%d.%m %k:%M"` "$b"
  4. done <$1 >$2
А если убрать перенаправления <$1 >$2, то можно будет использовать этот скрипт как фильтр:
cat logfile.log | grep чего-нибудь | unix2time | less
или типа того :)

там прикол в том что логи имеют не маленький размер и поэтому пакуется на ежедневной основе, но предварительно в них перебивается время.
что бы было в архиве в более симпатиШном виде
вот файлик запускаемый кроном
#!/bin/bash
date "+%d-%m-%y" > /var/log/ulog-acctd/ulog.date;
kill -s SIGTSTP `cat /var/run/ulog-acctd.pid`;
cp /var/log/ulog-acctd/account.log /var/log/ulog-acctd/daily/account.log;
cp /dev/null /var/log/ulog-acctd/account.log;
kill -s SIGCONT `cat /var/run/ulog-acctd.pid`;
/var/log/ulog-acctd/ulog.time.convert /var/log/ulog-acctd/daily/account.log /var/log/ulog-acctd/daily/ulog.log;
cd /var/log/ulog-acctd/daily/ && tar -czf /var/log/ulog-acctd/daily/ulog.$(cat /var/log/ulog-acctd/ulog.date).tar.gz ulog.log;
rm /var/log/ulog-acctd/daily/account.log;
rm /var/log/ulog-acctd/daily/ulog.log

 

Страница сгенерирована за 0.059 секунд. Запросов: 24.