2016-01-19 2 views
0

Я ищу некоторую помощь с проблемой анализа журнала, над которой я расколол голову в течение некоторого времени. У меня есть файл журнала, который содержит журналы из нескольких процессов, но не отсортирован в порядке. Как правило, каждая строка в файле журнал начинается с идентификатором процесса, но есть некоторые случаи, когда запись пролетов на несколько строк, как показано нижеАнализ журнала с использованием AWK

90234 abcd 
90234 pqrs 
98765 nbnbbb 
34072 tabt 
90234 stuv  -| 
     tttt   |- entry spanning over multiple lines 
     gggg  -| 
34072 yyyy 
98765 tytyy 

Так что моя задача состоит в том, чтобы извлечь все журналы для данного PID.

дан PID выход ожидается в следующем формате:

ПИД- 90234:

90234 abcd 
90234 pqrs 
90234 stuv 
     tttt 
     gggg 

ПИД- 34072:

34072 tabt 
34072 yyyy 

ПИД- 98765:

98765 nbnbbb 
98765 nbnbbb 
98765 tytyy 

Woul d действительно оценил любую помощь, но поскольку я хочу сделать это с помощью AWK, давайте все будем стараться и придерживаться AWK. Спасибо вам всем заблаговременно.

ответ

1

альтернатива awk поскольку количество полей не может быть постоянным в файле журнала

$ awk '/^[0-9]+/{p=$1} p==90234' log 

90234 abcd 
90234 pqrs 
90234 stuv  -| 
     tttt   |- entry spanning over multiple lines 
     gggg  -| 

вы можете сделать pid переменной как в примере @ пика.

1

Это не совсем ясно, что самый надежный скрипт будет в вашем случае, но если $PID является Идентификатором интерес, то следующее иллюстрирует один подход:

awk -v select="$PID" 'NF == 2 {pid=$1} pid == select {print}' 

Например, с PID = 90234 и ваш пример, результат будет:

90234 abcd 
90234 pqrs 
90234 stuv 
     tttt 
     gggg 
Смежные вопросы