Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / работа с логом с помощью AWK / 14 сообщений из 14, страница 1 из 1
30.11.2010, 08:34
    #36985062
Psychotron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
Добрый день, помогите, пожалуйста, ламерру))
Есть лог, где периодически встречаются записи след. формата:
.............................
.........
D T aa1 bb1 cc1 N1 (1)
D T aa12 bb12 cc12 dd12 ee12 Req (2)
.......
.................
............
D T aa2 bb2 cc2 N2 (3)
D T aa21 bb21 cc21 dd21 ee21 Req (4)
.......
.........
.............................
.............
D T aa1 bb1 cc1 N1 (5)
D T aa21 bb21 cc21 dd21 ee21 ACTIVE (6)
...
..........................
.....
D T aa3 bb3 cc3 N3 (7)
D T aa31 bb31 cc31 dd31 ee31 Req (8)
.............
.............................
.......
..................
D T aa2 bb2 cc2 N2 (9)
D T aa22 bb22 cc22 dd22 ee22 ACTIVE (10)



Записи по номерами 1, 2 связаны с 3, 4. Связка определяется по совпадающим номерам N ( и там и там это N1 )
Аналогично и для других случаев. Формат для данных записей неизменный, т.е. если есть запись типа (2) то предидущая запись будет именно под типом (1). Нужно обратить внимание что у записей по номерами 7, 8 нет связанной пары со статусом ACTIVE.
Необходимо вывести записи в след. формате:

D T aa1 bb1 cc1 N1
D T aa12 bb12 cc12 dd12 ee12
D T aa1 bb1 cc1 N1
D T aa21 bb21 cc21 dd21 ee21 ACTIVE
D T aa2 bb2 cc2 N2
D T aa21 bb21 cc21 dd21 ee21
D T aa2 bb2 cc2 N2
D T aa22 bb22 cc22 dd22 ee22 ACTIVE

Т.е. только те связанные пары, где последняя пара в статусе ACTIVE.
Отталкиваться при составлении селектора нужно именно от записи в статусе ACTIVE и определив номер N в записи - 1, найти по номеру N запись, где номер записи + 1 со статусом Req.
Главная проблема у меня возникла в том, что, найдя по шаблону нужную мне строку со статусом ACTIVE и найдя X (это номер записи этой строки -1) не могу вытащить в записи под номером X-1 поле с номером N, т.к X постоянно обнуляется.
Надеюсь,не сильно сумбурно объяснил)) Какими операторами можно вытащить X так, чтобы потом прога искала его с начала потока (заново), и найдя я мог выводить нужные поля с данным номером записи?
...
Рейтинг: 0 / 0
30.11.2010, 10:39
    #36985351
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
что-то такое:

Код: plaintext
cat log.txt  | awk '{if(NR%2) {k=$0}else {print $0"|"k}}' | awk '{if (arr[$(NF-1)]){ if($8=="ACTIVE") {print arr[$(NF-1)]"\n"$0 } }else{arr[$(NF-1)]=$0}}' | awk -F"|" '{print $2"\n"$1}'
...
Рейтинг: 0 / 0
30.11.2010, 11:21
    #36985489
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
или еще проще - так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/bin/awk -f
{
if(arr[$ 6 ]) {
        buf=arr[$ 6 ]"\n"arr[$ 6 "_2"]"\n"$ 0 
        getline;
        if($ 8 =="ACTIVE")
        {
        print buf"\n"$ 0 
        }
} else {
        myNF=$ 6 
        arr[myNF]=$ 0 ;
        getline;
        arr[myNF "_2"]=$ 0 ;
        }

}
...
Рейтинг: 0 / 0
01.12.2010, 08:57
    #36987799
Psychotron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
Спасибо, попробую
...
Рейтинг: 0 / 0
01.12.2010, 13:07
    #36988512
Psychotron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
к сожалению такой способ не работает. Значения зануляются (на вывод идёт пустая строка)
...
Рейтинг: 0 / 0
01.12.2010, 16:53
    #36989482
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
бррр, не понял немного

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
$ cat ./parser.awk
#!/bin/awk -f
{
if(arr[$ 6 ]) {
        buf=arr[$ 6 ]"\n"arr[$ 6 "_2"]"\n"$ 0 
        getline;
        if($ 8 =="ACTIVE")
        {
        print buf"\n"$ 0 
        }
} else {
        myNF=$ 6 
        arr[myNF]=$ 0 ;
        getline;
        arr[myNF "_2"]=$ 0 ;
        }
}
$
$
$ cat log.txt
D T aa1 bb1 cc1 N1 ( 1 )
D T aa12 bb12 cc12 dd12 ee12 Req ( 2 )
D T aa2 bb2 cc2 N2 ( 3 )
D T aa21 bb21 cc21 dd21 ee21 Req ( 4 )
D T aa1 bb1 cc1 N1 ( 5 )
D T aa21 bb21 cc21 dd21 ee21 ACTIVE ( 6 )
D T aa3 bb3 cc3 N3 ( 7 )
D T aa31 bb31 cc31 dd31 ee31 Req ( 8 )
D T aa2 bb2 cc2 N2 ( 9 )
D T aa22 bb22 cc22 dd22 ee22 ACTIVE ( 10 )
$
$
$ cat log.txt | ./parser.awk
D T aa1 bb1 cc1 N1 ( 1 )
D T aa12 bb12 cc12 dd12 ee12 Req ( 2 )
D T aa1 bb1 cc1 N1 ( 5 )
D T aa21 bb21 cc21 dd21 ee21 ACTIVE ( 6 )
D T aa2 bb2 cc2 N2 ( 3 )
D T aa21 bb21 cc21 dd21 ee21 Req ( 4 )
D T aa2 bb2 cc2 N2 ( 9 )
D T aa22 bb22 cc22 dd22 ee22 ACTIVE ( 10 )
$


вот как у меня. Какой вывод получается у Вас?
...
Рейтинг: 0 / 0
01.12.2010, 19:28
    #36989893
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
И ведь что характерно, почти каждый учил паскаль и какой-нибудь другой язык.
Нет, выдумывают себе проблем с awk.
...
Рейтинг: 0 / 0
01.12.2010, 21:34
    #36990081
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
Pascal для таких задач малость не предназначен
...
Рейтинг: 0 / 0
02.12.2010, 00:00
    #36990220
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
--null--, это еще почему? readln или writeln отменили?
Человека, который задается подобными вопросами вряд ли допустят писать скрипты для системы инициализации linux для каких-нибудь важных популярных пакетов. Никто не помрет если он напишет для своих задач на хорошо известном ему языке программу.
...
Рейтинг: 0 / 0
02.12.2010, 00:35
    #36990255
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
Pascal конечно универсальный язык, файловый ввод-вывод не отменили и никто не помрет, но это не столь удобно (perl/shell/awk все-таки на такие задачи заточены и справляются меньшими трудозатратами и объемом кода), плюс часто это может быть требованием работодателя. Я, скажем, работал в конторе, где такие вещи даже на perl запрещали писать: типа вот у нас стандарт для серверных скриптов - Bourne shell и Korn shell + unix utils и будь добр все на нем делать. Пусть даже это менее эффективно. Для совместимости и неразмножения зоопарка.
Заодно у них и требования к соискателям не раздувались потом. В общем, работодатель хочет - а наше дело исполнять.
...
Рейтинг: 0 / 0
02.12.2010, 01:24
    #36990307
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
--null--, а что бывает unix без perl ? данунафик!
...
Рейтинг: 0 / 0
02.12.2010, 01:32
    #36990311
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
netwind--null--, а что бывает unix без perl ? данунафик!Очем разговор. Униксы бывают даже с комплиляторами паскаля.
...
Рейтинг: 0 / 0
02.12.2010, 03:01
    #36990335
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
Relic Hunter, как о чем ? об откатах и идиотских требованиях в некоторых ИТ-отраслях.
...
Рейтинг: 0 / 0
02.12.2010, 09:50
    #36990530
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с логом с помощью AWK
netwind--null--, а что бывает unix без perl ? данунафик!

В общем и целом это ведь необязательный компонент ;-)
Конечно, он везде был, просто они не хотели умножать сущности.
(не надо поддерживать еще один язык, не надо его требовать при найме персонала и т.д.)
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / работа с логом с помощью AWK / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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