URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9567
[ Назад ]

Исходное сообщение
"Вывести в роли переменной каждую строку"

Отправлено levantuev , 22-Окт-12 19:13 
Здравствуйте! У меня две задачи. Помогите люди умный и добрые их решить.

1. Мне необходимо как-то понять какие НОВЫЕ строки появились за последние 10 секунд в файле,
2. Получится многострочный результат и этот результат вывести в роли переменной каждую строку.

Привожу пример:

В /var/log/messages постоянно пишется информация.

1. Нужно как-то вычислить что за 10 секунд появились новые строки такого вида:

Server kernel: pid 71863 (httpd), uid 0: exited on signal 10 (core dumped)
Server last message repeated 2 times
Server last message repeated 2 times
Server last message repeated 2 times

2. Каждую строку объявить в роли переменной, допустим $str[1], $str[2], $str[3], $str[4].....

?????


Содержание

Сообщения в этом обсуждении
"Вывести в роли переменной каждую строку"
Отправлено Дядя_Федор , 22-Окт-12 20:30 
Утилитка есть такая - logsentry. :) Вот она делает то, что Вы описали. Будучи запущенной в кроне. http://etutorials.org/Linux+systems/red+hat+linux+bible+fedo.../


"Вывести в роли переменной каждую строку"
Отправлено levantuev , 22-Окт-12 20:50 
> Утилитка есть такая - logsentry. :) Вот она делает то, что Вы
> описали. Будучи запущенной в кроне. http://etutorials.org/Linux+systems/red+hat+linux+bible+fedo.../

Отлично, с первой проблемой разобрался, а теперь как каждой строку вывести как переменную?


"Вывести в роли переменной каждую строку"
Отправлено levantuev , 22-Окт-12 21:59 
#!/bin/sh
vars=`/usr/local/bin/logtail /var/log/messages`
for i in $vars; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; done

Вопрос почти решен. Только вот for читает по словам а не по строкам. Как сделать что-бы по строкам считал? а так все отлично работает...


"Вывести в роли переменной каждую строку"
Отправлено pavlinux , 23-Окт-12 03:04 
> Как сделать что-бы по строкам считал?


oldIFS=$IFS;
for (;;)
    do
      cp /var/log/messages /tmp/;
      TIME=$(date +%s);
      sleep $(10-$((sTIME-TIME)));
      sTIME=$(date +%s);
      IFS=$'\n';
      LINES=($(diff -u /var/log/messages /tmp/messages));
          while i < LINES[@]
              do
                 echo $LINES[i];
          done
done
IFS=$oldIFS;
...
  

"Вывести в роли переменной каждую строку"
Отправлено Andrey Mitrofanov , 23-Окт-12 09:34 
> for i in $vars; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; done
> строкам. Как сделать что-бы по строкам считал?

while read i; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; done <<<"$vars"