2016-09-30 137 views
0

我有應用程序日誌,我需要打印與執行時間超過10000毫秒的所有行的狀態。在下面的示例中,只打印第一行,因爲第2行不會超過10k毫秒,第3行不顯示任何執行時間。AWK打印行基於列

SERVICE_NAME: | API: GetContents | 20160927000511741 | EXECUTION TIME: 10130(ms) 
SERVICE_NAME: | API: GetContentsExtend | 20160927000511741 | EXECUTION TIME: 22(ms) 
SERVICE_NAME: | API: GetContentsExtended | 20160927000511741 | Current TN: -15698724705531331 

我可以做多個步驟在一個文件中

店執行值做到這一點:

cat logfile.log | grep "EXECUTION TIME:" | awk '{print $NF}' | cut -d "(" -f1 | awk '{if ($1>9999) print $1}' >> input.txt 

循環通過這個輸入文件遍歷相同的日誌

cat input.txt | while read line 
do 
cat logfile.log | grep $line"(ms)" >> output.txt 
done 

燦這可以通過一個命令來完成嗎?什麼讓我很困難的是執行時間值後有(毫秒)。

回答

2

如果執行時間是> = 10000,然後將有字符串 「(MS)」 之前至少5位,所以:

grep -E 'EXECUTION TIME: [[:digit:]]{5,}\(ms\)' filename 
+0

說明明顯,如果閾值變化的說法,而不是1,234 1,000然後用正則表達式匹配的是不是一個偉大的方式VS數值比較。 –

1
$ awk '/EXECUTION TIME/ && ($NF+0)>=10000' file 
SERVICE_NAME: | API: GetContents | 20160927000511741 | EXECUTION TIME: 10130(ms) 

$NF是線路上的最後一個字段,例如字符串10130(ms)。將零加到它將結果轉換爲一個數字,這意味着awk從第一個非數字(即()開始剝離並結束,因此它變成號碼10130。然後它只是>=10000的數字比較。

+1

非常正確。您可能想要解釋'($ NF + 0)'的機制,以及如何將「10130(ms)」轉換爲 –

+0

。完成。 –