Awk
將部分日誌提取到其他文件
我們有一個 process.log 文件,其中有很多文本數據,在這之間我們發布了一些 XML 數據。
日誌中發布了數千個不同的 XML 以及其他文本數據。
3)現在我只需要選擇在**傳出 XML 之後發布的 XML 文件:**值
4)此外,必須選擇並複製到新文件的 XML 文件應該是與 ALERTID 標記中的值匹配的文件。
- ALERTID 值將在腳本輸入中提供。所以在我們的例子
mGMjhgHgffHhhFdH1u4
中將在輸入中提供,我們需要選擇為此 alertid 發布的完整 XML 文件。起始標籤是 from<xml version..>
和結束標籤是</Alert>
5)所以我需要根據特定的 ALERTID 在新文件中選擇相關的傳出 XML 文件,以便可以在不同的環境中重播。
日誌文件的格式如下:
Info Jan 11 17:30:26.12122 The process is not responding to heartbeats Debug Jan 11 17:30:26.12123 Incoming XML :<xml version "1.0" encoding ="UTF-8"?> <Alert trigger = "true" > <Alerttype>orderReject</Alerttype> <AlertID>ghghfsjUtYuu78T1</AlertID> <Order>uusingas</Order> <Quantity>1254</Quanity> </Alert> (CreateInitEventHandler. C:356) Debug Jan 11 17:30:26.12199 The process is going down with warnings Debug Jan 11 17:30:26.148199 Outgoing XML: <xml version "1.0" encoding ="UTF-8"?> <Alert trigger = "true" > <Alerttype>orderheld</Alerttype> <AlertID>mGMjhgHgffHhhFdH1u4</AlertID> <Order>uwiofhdf</Order> <Quantity>7651</Quanity> </Alert>(CreateEventHandler. C:723) Debug Jan 11 17:30:26.13214 The process has restarted and thread opened Debug Jan 11 17:30:26.13215 The heartbeat is recieved from alertlistener process
現在的要求是在輸入中獲取 AlertID,掃描程序日誌並在單獨的文件中提取匹配的傳出 XML。
使用 awk 我能夠提取所有傳出的 xml 文件,但不確定如何提取與特定 AlertID 相關的文件。
此外,我無法按照公司政策安裝/使用任何新的 XML 解析器。這需要使用 shell/perl/awk/sed 來實現
例如:
awk '/Outgoing/{p=1; s=$0} P & & /<\/Alert>/ {print $0 FS s; s="" ;p=0}p' 1.log>2.log
假設您的 ID 在名為 的變數中給出
ALERTID
:sed -e '/Outgoing XML/!d;:a' -e '$d;N;s/.*\(<xml version.*<\/Alert>\).*/\1/;Ta' -e "/$ALERTID/!d" yourfile.log
解釋:
/Outgoing XML/!d;:a
刪除東西直到該Outgoing XML
行並開始循環然後$d
刪除文件末尾未完成的記錄N;s/.*\(<xml version.*<\/Alert>\).*/\1/;Ta
追加行直到</Alert>
找到標記並刪除所需塊之前和之後的所有內容"/$ALERTID/!d
deletes blocks without the`$ALERTID```Maybe better to read:
sed '/Outgoing XML/!d;:a $d;N s/.*\(<xml version.*<\/Alert>\).*/\1/;Ta /'$ALERTID'/!d' yourfile.log