Shell-Script

在 bash 中按月、日期和時間過濾日誌文件

  • May 1, 2015

我想在以下日誌之間獲取數據,Apr 24 10:00:00.000000Apr 25 24:00:00.999999我不確定如何完成這項工作:

files/file1:Apr 22 02:47:00.663117 somedata    
files/file1:Apr 23 04:47:00.663127 somedata    
files/file1:Apr 24 05:47:00.663137 somedata    
files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata    
files/file1:Apr 26 23:47:00.663177 somedata

我嘗試使用以下命令,但這只會按時間過濾而不考慮日期:

awk -v start=10:00:00.000000 -v stop=24:00:00.999999 'start <= $3 && $3 <= stop'

我只想獲取以下數據:

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata

有人可以幫忙嗎?此外,在過濾時考慮月份也是非常有用的

您可以非常簡單地為日過濾器添加更多變數:

awk -v start_day=24 -v stop_day=25 -v start_time=10:00:00.000000 -v stop_time=24:00:00.999999 'start_day <= $2 && $2 <= stop_day && start_time <= $3 && $3 <= stop_time' file

產量

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata

我們錯過了 4 月 25 日的線路,因為我們盲目地將時間過濾到上午 10 點以下。我們所要做的就是實現一個邏輯測試來過濾第一天的時間:

awk -v start_day=24 -v stop_day=25 -v start_time=05:00:00.000000 -v stop_time=05:00:00.999999 'start_day <= $2 && $2 <= stop_day && (start_time <= $3 || start_day != $2) && $3 <= stop_time' file

產量

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata 

幾個月來,您可以遵循相同的想法,但您需要將 Apr 轉換為 04(預處理或 awk 魔術?)並在其上應用 <= =>。

引用自:https://unix.stackexchange.com/questions/199776