У меня есть файл, который составляет 20 - 80 + МБ, что представляет собой определенный тип файла.
Он бревна из наших процессах, и этот процесс представляет собой многопрофильную жил. Таким образом, файл журнала рода беспорядок. Вот пример:
В лог-файл выглядит следующим образом: "ДАТА ВРЕМЯ - THREAD ID - Подробная информация", а новый файл создается на каждый день
Цитата:
20090409 000122 - BD0 - Приказ 123 начала сессии
20090409 000122 - BD0 - обработка 1
20090409 000122 - BD0 - Дополнительная обработка
20090409 000123 - EF0 - Приказ 234 начала сессии
20090409 000124 - EF0 - Обработка
20090409 000124 - BD0 - Обработка 2
20090409 000125 - BD0 - Дополнительная обработка
20090409 000125 - EF0 - Обработка
20090409 000125 - DD1 - Отмена 345 начала сессии
20090409 000125 - DD1 - Обработка
20090409 000126 - DD1 - Обработка 2
20090409 000126 - BD0 - Приказ 123 закрытие
20090409 000127 - 11F - 543 запросов, начиная сессии
20090409 000127 - 11F - Обработка
..
..
20090409 000135 - 11F - Запрос 543 закрытие
..
20090409 000140 - EF0 - Приказ 234 закрытие
..
..
..
20090409 000143 - DD1 - 345 Отменить закрытие
|
Теперь, вот, где она получает быть более ... Мне нужно вытащить из линий "Запуск сессия" на "Завершение сессии" для каждого Thread ID, и складывать их в отдельные файлы. Тем не менее, Thread ID Может быть продублированы в течение дня - но, как правило, не на много часов.
А сессия может длиться от 30 секунд до 4 минут или около того (~ 1200 строк) в лог-файл, и не может быть до 20 одновременных сессий.
Теперь я имею что-то работает - хотя и довольно медленно. Я в конечном итоге grepping и sedding файл снова и снова. Когда файл становится большой, занимает огромное количество времени. Я надеялся, что здесь кто-то может мне помочь оптимизировать это. Если можно, я хотел бы использовать Bash.
Спасибо,
Эрик
Вот код я, что работает, но _slow_
Код:
if [[ -e "$log_file" ]]
then
echo "parsing: "$log_file
grep "starting session" $log_file | while read line
do
thread=`echo $line | cut -d' ' -f4`
sessiontype=`echo $line | cut -d' ' -f6`
sessionnumber=`echo $line | cut -d' ' -f7`
echo " first line of session: "${line:0:25}"..."
line2=`echo - $thread - $sessiontype $sessionnumber shutting down`
echo " last line of session: "${line2:0:25}"..."
sed -n "/$line/,/$line2/p" $log_file | grep " - $thread - ">session.$thread.$sessiontype.$sessionnumber
done
....
Это дает мне несколько файлов, что на примере журнала выше будет создано, как показано ниже:
Цитата:
Файл: session.BD0.Order.123
20090409 000122 - BD0 - Приказ 123 начала сессии
20090409 000122 - BD0 - обработка 1
20090409 000122 - BD0 - Дополнительная обработка
20090409 000124 - BD0 - Обработка 2
20090409 000125 - BD0 - Дополнительная обработка
20090409 000126 - BD0 - Приказ 123 закрытие
Файл: session.DD1.Cancel.345
20090409 000125 - DD1 - Отмена 345 начала сессии
20090409 000125 - DD1 - Обработка
20090409 000126 - DD1 - Обработка 2
..
..
..
20090409 000143 - DD1 - 345 Отменить закрытие
Файл: session.11F.Query.543
20090409 000127 - 11F - 543 запросов, начиная сессии
20090409 000127 - 11F - Обработка
..
..
20090409 000135 - 11F - Запрос 543 закрытие
Файл: session.EF0.Order.234
20090409 000123 - EF0 - Приказ 234 начала сессии
20090409 000124 - EF0 - Обработка
20090409 000125 - EF0 - Обработка
20090409 000140 - EF0 - Приказ 234 закрытие
|