2013-08-21 3 views
-3

Я получил огромный журнал в zip-файлах, мне нужно написать строки по конкретным данным, и если строка с тем же содержимым содержит XML-сообщение с тем же идентификатором сессии, будет записано в файл.Записать конкретные данные из журнала

Структура журнала:

2013-08-16 16:31:06,810 (122:   rogate) [98839276727] INFO -  UId:10453, GId:5422: new CONX started, Application Context: disconnected 
2013-08-16 16:31:34,210 (122:   rogate) [98839276727] INFO -  UId:32453, GId:1213: new CONX started, Application Context: disconnected 
2013-08-16 16:31:45,110 (122:   rogate) [98839276727] INFO -  UId:11453, GId:2133: new CONX started, Application Context: disconnected 
2013-08-16 16:31:45,729 (1093:    jms_con.cpp) [140561430333184] DEBUG - Received XML TextMessage: 
<?xml version="1.0" encoding="UTF-8"?><> 
<version>1</version> 
<sessionId>114532133</sessionId> 
<networkProtocolId>CAPv2</networkProtocolId> 
<trafficType>Forwarding</trafficType> 
    <messages> 
    <reportNotificationAck/> 
<superviseReq> 
<requestSequenceNr>0</requestSequenceNr> 
<time>60000</time> 
<releaseAfterTimeExpires>false</releaseAfterTimeExpires> 
    <playWarningTone>false</playWarningTone> 
</superviseReq> 
<eventReportReq> 
<requestSequenceNr>1</requestSequenceNr> 
<events> 
<routeSelectFailure monitorMode="Interrupt"/> 
<busy monitorMode="Interrupt"/> 
<noAnswer monitorMode="Interrupt"> 
    <noAnswerTimer>180000</noAnswerTimer> 
</noAnswer> 
<answer monitorMode="Notify"/> 
<disconnectCalling monitorMode="Interrupt"/> 
<disconnectCalled monitorMode="Interrupt"/> 
<abandon monitorMode="Notify"/> 
</events> 
</eventReportReq> 
<continueProcessing> 
<requestSequenceNr>2</requestSequenceNr> 
<moreEventsExpected>true</moreEventsExpected> 
<interruptEventReceived>true</interruptEventReceived> 
</continueProcessing> 
2013-08-16 16:59:03,666 (1252:   capgw_main.cpp) [140561430333184] INFO - UId:57371, GId:7137: STAT_ISIG_PROCESSING: 0.001007. 
2013-08-16 16:59:03,666 (888: tcap_context_storage.cpp) [140561430333184] DEBUG - UId:57371, GId:7137: updating the Last Appl. Access Time. 
2013-08-16 16:59:03,666 (937: tcap_context_storage.cpp) [140561430333184] DEBUG - UId:57371, GId:7137: new Appl. message has different direction as previously stored one, calculating the response time. 
2013-08-16 16:59:03,666 (1260:   capgw_main.cpp) [140561430333184] DEBUG - UId:57371, GId:7137: TCAP Context Storage updated successfully (received iSig message). 
2013-08-16 16:59:03,666 (1263:   capgw_main.cpp) [140561430333184] INFO - UId:57371, GId:7137: STAT_ISIG_RESP_TIME: 0.023346 
2013-08-16 16:59:03,666 (767: tcap_context_storage.cpp) [140561430333184] DEBUG - UId:57371, GId:7137: updating the Last TCAP Access Time. 

После третьей строке сообщений XML-присутствует с таким же SESSIONID как линия UID + GiD. Мне нужно написать эти строки в новые файлы, например:

2013-08-16 16:31:45,110 (122:   rogate) [98839276727] INFO -  UId:11453, GId:2133: new CONX started, Application Context: disconnected 
2013-08-16 16:31:45,729 (1093:    jms_con.cpp) [140561430333184] DEBUG - Received XML TextMessage: 
<?xml version="1.0" encoding="UTF-8"?><> 
<version>1</version> 
<sessionId>114532133</sessionId> 
<networkProtocolId>CAPv2</networkProtocolId> 
<trafficType>Forwarding</trafficType> 
    <messages> 
    <reportNotificationAck/> 
<superviseReq> 
<requestSequenceNr>0</requestSequenceNr> 
<time>60000</time> 
<releaseAfterTimeExpires>false</releaseAfterTimeExpires> 
    <playWarningTone>false</playWarningTone> 
</superviseReq> 
<eventReportReq> 
<requestSequenceNr>1</requestSequenceNr> 
<events> 
<routeSelectFailure monitorMode="Interrupt"/> 
<busy monitorMode="Interrupt"/> 
<noAnswer monitorMode="Interrupt"> 
    <noAnswerTimer>180000</noAnswerTimer> 
</noAnswer> 
<answer monitorMode="Notify"/> 
<disconnectCalling monitorMode="Interrupt"/> 
<disconnectCalled monitorMode="Interrupt"/> 
<abandon monitorMode="Notify"/> 
</events> 
</eventReportReq> 
<continueProcessing> 
<requestSequenceNr>2</requestSequenceNr> 
<moreEventsExpected>true</moreEventsExpected> 
<interruptEventReceived>true</interruptEventReceived> 
</continueProcessing> 

Если файл с именем, как XML-сообщениями SESSIONID, как 114532133_something.txt и писать это каждые два журнал сообщений в новый файл.

Спасибо за помощь!

Edit:

Попытка сделать в сценарии с не так много успеха.

#!/usr/bin/awk -f 

BEGIN { FS=":|," } 
FNR==NR && /INFO/ { 
    a[$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10]++ ; 
    next 

} 

END 

{ 
    for (i in a) print i 
} 
+0

Можете ли вы разместить 2 или более блок данных? Это поможет мне разобраться, как это сломать. – Jotne

+0

Я добавил несколько других строк. Просто нужны те строки, где представлено сообщение XML. Если идентификатор сеанса такой же, как UId + GId. И каждая строка + XML-сообщение печатается в новом файле и в этом текстовом файле с именем sessionID_cpv.txt. Thanks – Telcom

+0

Что бы вы хотели иметь в файле? Только строка с информацией о дате, блок xml? Есть ли в вашем файле более одного блока xml? – Jotne

ответ

0

Я разделил это на несколько задач. Может быть, кто-то может объединить все это вместе.

1- Найти идентификатор сеанса формы строку, содержащую INFO и сохранить его в файл t1

awk -F":|," 'FNR==NR && /INFO/ {a[$6$8]++;next} END {for (i in a) print i }' xml_file >t1 

2. Извлечь все строки журнала (начиная с 2013 года) и сохранить его в t2

awk '!/^2013/' xml_file >t2 

3- печати каждый XML-навалом, если она содержит один из идентификатора, найденного в шаге 1

awk 'FNR==NR {a[$1]++;next} FNR==1 {RS="</continueProcessing>"} { for (i in a) {if ($0~i) print}}' t1 t2 

Я предположил, что все разделы XML заканчиваются. Если это не так, это не сработает.

+0

Но я не хочу удалять строки журнала, просто нужны те, где присутствует сообщение XML с тем же идентификатором сеанса, что строка журнала содержит UId + GId. И создайте каждый этот (строка журнала + XML-сообщение) новый файл с именем sessionID_something.txt. – Telcom

+0

Итак, вы хотите, чтобы все строки журнала + все массивы xml находились в INFO в строке журнала? Поэтому просто удалите XML-bluks, у которых нет строки журнала с INFO – Jotne

+0

Все строки журнала, содержащие INFO с XML-сообщением. Только эти строки в новые файлы. Каждая строка журнала + XML-сообщение в новый файл, этот файл будет вызываться как идентификатор сеанса XML-сообщения. Например: В журнале я получил строку с UId + GId, для некоторых из этих журналов было получено XML-сообщение с номером (UId + GId) как sessionID. Мне нужно записать эти две вещи в новый файл. Каждая строка журнала, в которой присутствует XML-сообщение. – Telcom

Смежные вопросы