2013-07-10 24 views
2

我有我的日誌文件,這樣我試圖retrive日期範圍AWK的日期範圍日期格式喜歡的MM/DD/YYYY HH:mm:ss的

"07/10/2013 01:31:54","SNMP" 

"07/10/2013 01:31:54","SNMP" 
.... ... .. 
"07/10/2013 03:03:54","SNMP" 

我使用休耕awk命令,它給所有行,我試過不同的組合沒有用,是否有標準的數據格式需要在awk中使用?

awk -F, '"07/10/2013 01:35:40" > $1&&$1 <= "07/10/2013 01:50:03"' Mylog.log | wc -l 

回答

1

字符串比較:

$ awk -F" '"07/10/2013 01:35:40" > $2 && $2 <= "07/10/2013 01:50:03"' file 
"07/10/2013 01:31:54","SNMP" 
"07/10/2013 01:31:54","SNMP" 
.... ... .. 

...似乎工作!要比較時間更好使用mktime("YYYY MM DD HH MM SS")

3

您有兩個問題:CSV解析日期比較

您可以使用match()CSV parsing function解決的第一個問題。

第二個可以通過使用適當的日期格式(如ISO-8601)解決的第二個問題,可以比較詞法上比較愉快的副作用是日期(不包括時區/ DST更改)。 如果您真的在使用gawk而不是普通的awknawk,則可以使用內置日期函數mktime()解析時間戳並返回允許日期進行數值比較的時代第二個序號。 awk沒有本地日期/時間類型,也沒有標準數據/時間庫,因此詞法或數字比較是最直接的選擇。

gawk最後一個選項是一個討厭的劈:

/^"07.10.2013 01:35:40"/,/^"07.10.2013 01:50:03"/ { 
    # your code here 
} 

此使用range expression以限制匹配某些行之間的範圍。只要時間單調遞增,這應該適用於您的文件格式 - 這是而不是對於Apache日誌是正確的(因爲它們按完成順序進行記錄,但默認情況下包含原始請求時間戳記,並且不保證單調增加)。