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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Bash скрипт: вывести кусок лог-файла за определенный промежуток времени/  (Прочитано 1091 раз)

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

Оффлайн airnya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Добрый день, скрипту передается 3 значения:
Какой файл, дата начала, дата конца; результат должен выводить в отдельный файл. (в будущем: добавить конвертацию вида даты)

Пример:
Код: (bash) [Выделить]
#!/bin/bash
read -p "В каком логе искать " log
read -p "Дата начало " date1
read -p "Дата конец " date2
START=`grep -n 'data1' "$log" | cut -f1 -d:`
echo $START

END=`grep -n 'data2' "$log" | cut -f1 -d:`
echo $END
RESULT=`sed -n '/"$START"/,/"$END"/p' "$log" > "$log".temp`
cat "$log".temp


грепаются нужные строки от START по END в виде:
1
4
6
8
9
затык происходит на sed, т.к. он не воспринимает несколько цифр подряд без запятых
просьба помочь в этой ситуации
« Последнее редактирование: 10 Августа 2018, 22:52:16 от Azure »

Оффлайн rtupe

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Затык в том, что переменные $START и $END экранированы внешними ординарными кавычками. Так будет работать:

sed -n "/$START/,/$END/p"
Если значения этих переменных не содержат пробелов, то можно вообще без кавычек

sed -n /$START/,/$END/p

Но скрипт в любом случае нерабочий. Читаются искомые даты в переменные date1, date2, грепаются литералы data1, data2 (зачем-то помещенные в ординарные кавычки). Переменная RESULT не используется (это не ошибка, просто непонимание логики работы скрипта)
« Последнее редактирование: 10 Августа 2018, 09:20:59 от rtupe »

Оффлайн airnya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Спасибо за разъяснение

Я хотел реализовать так:
1. Находятся строки, с нужными данными.
2. Выводятся строки.
sed + номера строк.

Подскажи пожалуйста как это можно реализовать?

Оффлайн rtupe

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Совершенно не понял, что требуется. На будущее - очень желательно, для получения точного и полного ответа, приводить образец ввода и образец желательного вывода. Ну и давать более четкое описание задачи.

Оффлайн airnya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Например, имеем лог sql_save.log:
12:00:01: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:02: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:03: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:04: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:05: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:06: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:07: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:08: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:09: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:10: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething

Нужно написать скрипт, который вырезал бы промежуток времени, например: с 12:00:04 по 12:00:08 и выводил в отдьельный файл.
Т.е. параметры должны быть такие:
./скрипт КакойФайл ДатаНачала ДатаКонца

Оффлайн jwbd

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
airnya,
grep '12:00:0[2-7]' test

12:00:02: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:03: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:04: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:05: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:06: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething
12:00:07: SELECT Sometingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomethingsometingsomething

 

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