Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / работа с cat и cut / 12 сообщений из 12, страница 1 из 1
06.12.2011, 11:07
    #37560552
lubava1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
есть строчка в bash файле:
Код: plaintext
1.
 cat $1 | grep CommonsQueryLoggingListener | cut -d ' ' -f 9- | cut -d ']' -f 1 | cut -d '[' -f 2 | sort | uniq > tmp/sql.tmp


$1 - переменная с путем к обрабатываемому файлу
cat отбирает строчки в логах БД в которых содержится данный класс(CommonsQueryLoggingListener), который содержит сведения об обрабатываемых запросах.
вся остальная часть обрабатывает не все строчки верно. А часть обрезает. например в изначальном файле(в самом файле это единая строка):

Код: plaintext
1.
2.
3.
4.
2011-12-02 03:51:13,675 WARN [net.ttddyy.dsproxy.listener.CommonsQueryLoggingListener] - Name:,
 Time:872423, Num:1, Query:{[select id from letd.docstore where TYPEID in 
(select id from letd.doctype where name in ('ТУ-133_2','ТУ-133_3'))and xmlexists('$c/data[docid2="39059384"]' passing docdata as "c")
 order by id][]}


а выводит:
Код: plaintext
1.
select id from letd.docstore where TYPEID in (select id from letd.doctype where name in ('ТУ-133_2','ТУ-133_3'))and xmlexists('$c/data




а вот на примере какая строка нормально обрабатывается:
Код: plaintext
1.
2.
2011-12-02 22:49:13,249 WARN [net.ttddyy.dsproxy.listener.CommonsQueryLoggingListener] - Name:, 
Time:1, Num:1, Query:{[select next value for LETD.vu_seq from letd.wrkname fetch first row only with ur][]}



выводит:
Код: plaintext
1.
select next value for LETD.vu_seq from letd.wrkname fetch first row only with ur



я так понимаю, что внутри первого запроса есть квадратные скобки, изза чего проблемы.
как можно избежать этого, чтобы они не учитывались? чтобы в одной строке брались тока самые внешние скобки?
...
Рейтинг: 0 / 0
06.12.2011, 13:12
    #37560828
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
lubava1991, бедняга. как только ты замечаешь что раздумываешь над тонкостями обработки шелл более 15 минут, надо бросить и переписать на приличном языке.
...
Рейтинг: 0 / 0
06.12.2011, 13:26
    #37560863
lubava1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
мне просто дали этот скрипт. Я никогда ранее не сталкивалась с таким, обычно тока с sql работаю.
как можно переписать и на какой язык?
...
Рейтинг: 0 / 0
06.12.2011, 13:51
    #37560928
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
Что за криворукие говнокодеры пошли, что пишут свое говно творение с привязкой к определенной системе.
Все запросы должны динамически генерироваться и средствами самого движка.
Ту непонятно какой язык, БД и движок (если он еще есть).
Однозначного ответа тут можно не дождаться.
...
Рейтинг: 0 / 0
06.12.2011, 14:20
    #37560999
lubava1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
нее))) скрипт этот отрабатывает логи от db2.
чтобы в дальнейшем определить сколько времени каждый запрос выполнялся.
этой частью от просто выбирает сами запросы, а далее(в части что не выложила сюда) сравниваются с исходным файлом и выводят время выполнения перед запросами.
мне надо пока что, чтобы запросы на выводе были полными
...
Рейтинг: 0 / 0
06.12.2011, 14:38
    #37561037
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
lubava1991, если это собственный инструментарий DBA - да хоть на паскале пишите. readln/writeln разве можно забыть?

я бы попробовал преобразовать этот лог в формат mysql slow log, а тот уже анализировать с помощью mysqlsla. данные по времени работы у вас есть. но жаль нет числа затронутых строк. mysqlsla "нормализует" похожие запросы и позволит собрать более удобную статистику.
...
Рейтинг: 0 / 0
06.12.2011, 14:51
    #37561070
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
допустим, если взять perl, то задача из позиционного разбора превращается в простейшее регулярное выражение

cat $1 | grep CommonsQueryLoggingListener | perl -npe 's/Query:{\[(.+)\]\[\]}/$1/' sort | uniq > tmp/sql.tmp

Чего-то подобного можно добиться и с помощью утилиты pgrep, если она есть. Вот perl есть наверняка.
...
Рейтинг: 0 / 0
06.12.2011, 14:54
    #37561077
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
палочку потерял в предыдущем сообщении

cat $1 | grep CommonsQueryLoggingListener | perl -npe 's/Query:{\[(.+)\]\[\]}/$1/' | sort | uniq > tmp/sql.tmp
...
Рейтинг: 0 / 0
06.12.2011, 16:18
    #37561301
lubava1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
вообще ничего не отбирает этот скрипт)
...
Рейтинг: 0 / 0
06.12.2011, 17:24
    #37561470
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
lubava1991, может и ошибся
если я что-то не так понял, то предлагаю вам исправить по мотивам.
главная мысль - есть более лаконичные и удобные средства практически всегда присутствующие на unix помимо cut и cat
вот так пробуйте

cat $1 | grep CommonsQueryLoggingListener | perl -npe 's/.+Query:{\[(.+)\]\[\]}/$1/' | sort | uniq > tmp/sql.tmp
...
Рейтинг: 0 / 0
06.12.2011, 18:49
    #37561645
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
Как совершенно правильно говорят вышеуказанные товарищи, cut с разделителями для таких данных явно не труъ.

Лучше всего определить границы записи и вырезать.
Так, если считать {[SQLВЫРАЖЕНИЕ][]}
то можно

cat test.txt | sed -e 's/.*{\[\(.*\)\]\[\]}.*/\1/'
...
Рейтинг: 0 / 0
06.12.2011, 19:02
    #37561672
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с cat и cut
или awk-ом посплитить

cat test.txt | awk '{split($0,arr,"{\\[|\\]\\[\\]}");print arr[2]}'
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / работа с cat и cut / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]