我正在寫一個loganalysis應用程序,並希望在兩個特定日期之間獲取apache日誌記錄。假定一個日期是這樣形成的:22/Dec/2009:00:19(日/月/年:小時:分鐘)AWK:比較不使用正則表達式的Apache日期
目前,我正在使用正則表達式來替換月份名稱值,刪除分隔符,所以上述日期轉換爲:221220090019
作出一個日期比較微不足道......但..
在大型文件的每個記錄上運行一個正則表達式,例如一個包含四分之一百萬記錄,是非常昂貴..是否有任何其他方法不涉及正則表達式替換?
在此先感謝
編輯:這裏是幹什麼的皈依/比較
function dateInRange(t, from, to) {
sub(/[[]/, "", t);
split(t, a, "[/:]");
match("JanFebMarAprMayJunJulAugSepOctNovDec", a[2]);
a[2] = sprintf("%02d", (RSTART + 2)/3);
s = a[3] a[2] a[1] a[4] a[5];
return s >= from && s <= to;
}
「從」和「到」是在上述格式的時間間隔,而「T」的功能原始的apache日誌日期/時間字段(例如[22/Dec/2009:00:19:36)
也許除了你所要求的,但爲什麼當ISO 8601,即「200912220019」有很多好處時,你想要「221220090019」呢? http://en.wikipedia.org/wiki/ISO_8601 – hlovdal 2010-05-15 20:57:42
沒有想過它真的......那些與易用性比較/性能有關的好處?大部分記錄屬於同一年,同一個小時內的同一年,同一個月,同一天(有時),所以也許是? – smallmeans 2010-05-15 21:18:07
就你而言,最重要的好處是用ISO 8601時間順序和字母順序變得相同。它使年齡排序超級平凡。也許那不是你現在需要的東西,而是爲我們自己一個忙,並且開始使用8601做一切事情,除非你有一個很好的理由不去做。其他好處也列在http://www.cl.cam.ac.uk/~mgk25/iso-time.html。 – hlovdal 2010-05-15 22:39:15