Я получил огромный журнал в 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
}
Можете ли вы разместить 2 или более блок данных? Это поможет мне разобраться, как это сломать. – Jotne
Я добавил несколько других строк. Просто нужны те строки, где представлено сообщение XML. Если идентификатор сеанса такой же, как UId + GId. И каждая строка + XML-сообщение печатается в новом файле и в этом текстовом файле с именем sessionID_cpv.txt. Thanks – Telcom
Что бы вы хотели иметь в файле? Только строка с информацией о дате, блок xml? Есть ли в вашем файле более одного блока xml? – Jotne