2016-10-03 93 views
-3

我在UNIX服務器上有一個日誌文件,我試圖搜索單個模式並從日誌中打印多個字符串。在Unix中搜索和打印

對於實例日誌如下:

2016-01-01 10:10:10.234 SEND <Msg><Name>XYZ</Name><ID>1231231</ID></Msg> 
2016-01-01 10:10:10.333 RECIEVE <Msg><Name>XYZ</Name><ID>1231231</ID></Msg> 
2016-01-01 10:10:11.434 SEND <Msg><Name>ABC</Name><ID>2231231</ID></Msg> 
2016-01-01 10:10:11.533 RECIEVE <Msg><Name>ABC</Name><ID>2231231</ID></Msg> 

我想搜索 'SEND' 並打印輸出如下:

10:10:10 1231231 
10:10:11 2231231 

thanx提前

+0

您正在使用哪種語言?也許在Unix上StackExchange會更合適。 無論如何,請閱讀python等語言中的正則表達式,或者使用grep命令與awk一起提取所需的信息。 – gonczor

+1

你試過解決這個問題嗎?你看到了什麼問題? – Inian

+0

我只在shell腳本中嘗試。我嘗試過自己,但我只能打印第一個或第二個字符串。 –

回答

0

感謝大家誰幫我。我能夠得到結果。以下是我用過的命令:

cat test.txt | grep "SEND" | sed 's/<\/ID>.*//g'|awk 'BEGIN {FS=" |>"} {print $2, $NF}' 
0

我想你可以試試這個程序:

#!/bin/bash 

awk '{ 
    if($3 == "SEND") { 
     gsub(/\..*/, "", $2) 
     match($4, /<ID>([0-9]+)<\/ID>/, ary) 
     printf "%s %s\n", $2, ary[1] 
    } 
}' input.txt 

input.txt就是你們的榜樣日誌,以上程序的輸出是:

10:10:10 SEND 
10:10:11 SEND 
+1

雖然這是一個很好的嘗試,但它不能回答作者的實際需求,請重新檢查作者的預期輸出結果。 – Inian

+0

@Inian,哦,是的。我誤解了這個問題。現在我已經解決了我的問題。 –