powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / работа с логом с помощью AWK
14 сообщений из 14, страница 1 из 1
работа с логом с помощью AWK
    #36985062
Psychotron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, помогите, пожалуйста, ламерру))
Есть лог, где периодически встречаются записи след. формата:
.............................
.........
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
работа с логом с помощью AWK
    #36985351
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то такое:

Код: 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
работа с логом с помощью AWK
    #36985489
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или еще проще - так:


Код: 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
работа с логом с помощью AWK
    #36987799
Psychotron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36988512
Psychotron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
к сожалению такой способ не работает. Значения зануляются (на вывод идёт пустая строка)
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36989482
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бррр, не понял немного

Код: 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
работа с логом с помощью AWK
    #36989893
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ведь что характерно, почти каждый учил паскаль и какой-нибудь другой язык.
Нет, выдумывают себе проблем с awk.
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990081
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pascal для таких задач малость не предназначен
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990220
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--, это еще почему? readln или writeln отменили?
Человека, который задается подобными вопросами вряд ли допустят писать скрипты для системы инициализации linux для каких-нибудь важных популярных пакетов. Никто не помрет если он напишет для своих задач на хорошо известном ему языке программу.
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990255
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pascal конечно универсальный язык, файловый ввод-вывод не отменили и никто не помрет, но это не столь удобно (perl/shell/awk все-таки на такие задачи заточены и справляются меньшими трудозатратами и объемом кода), плюс часто это может быть требованием работодателя. Я, скажем, работал в конторе, где такие вещи даже на perl запрещали писать: типа вот у нас стандарт для серверных скриптов - Bourne shell и Korn shell + unix utils и будь добр все на нем делать. Пусть даже это менее эффективно. Для совместимости и неразмножения зоопарка.
Заодно у них и требования к соискателям не раздувались потом. В общем, работодатель хочет - а наше дело исполнять.
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990307
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--, а что бывает unix без perl ? данунафик!
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990311
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind--null--, а что бывает unix без perl ? данунафик!Очем разговор. Униксы бывают даже с комплиляторами паскаля.
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990335
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter, как о чем ? об откатах и идиотских требованиях в некоторых ИТ-отраслях.
...
Рейтинг: 0 / 0
работа с логом с помощью AWK
    #36990530
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind--null--, а что бывает unix без perl ? данунафик!

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


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