Grep
比較使用者給定時間的日誌文件時間
立即為糟糕的問題和標題道歉……這些天學習 unix 及其命令,我試圖找出以下場景的解決方案:
可以說我有一個日誌文件,如下所示:
01-02-1988 12:00:00 I start 01-02-1988 12:00:01 I start 01-02-1988 12:00:02 I start 01-02-1988 12:00:03 I start 01-02-1988 12:00:04 I start 01-02-1988 12:00:05 I start 01-02-1988 12:00:06 I start 01-02-1988 12:00:07 I start 01-02-1988 12:00:08 I start 01-02-1988 12:00:09 I start 01-02-1988 01:00:10 I start
我從他想要查看狀態的使用者那裡獲取一個時間範圍。要過濾掉所有過程,我可以這樣做:
egrep $usr_time log.txt
但是有什麼辦法我可以在特定的時間段內做同樣的事情,比如
awk
,可以匹配我在$2
這裡的值……但是如何比較它的秒數(ss in hh:mm:ss)???例如:假設我想要來自的記錄
12:00:01 - 12:00:06
,所以基本上我需要的是從:
分隔符中提取第三個值並進行比較……如何實現……請幫助!!!!
如果您可以確定條目是按時間順序排列的,那麼您可以使用這兩個時間(如果兩者都存在於文件中!)作為開始和停止地址:
start cmd:> sed -n -e /12:00:03/,/12:00:09/p file 01-02-1988 12:00:03 I start 01-02-1988 12:00:04 I start 01-02-1988 12:00:05 I start 01-02-1988 12:00:06 I start 01-02-1988 12:00:07 I start 01-02-1988 12:00:08 I start 01-02-1988 12:00:09 I start
如果文件中可能沒有出現開始時間和停止時間,那麼您必須進行比較(可能需要在此計算中包括日期)
awk -v starttime="12:00:03" -v stoptime="12:00:09" \ 'BEGIN {FS=":"; $0=starttime; startts=$1*3600+$2*60+$3; '\ '$0=stoptime; stopts=$1*3600+$2*60+$3; FS=" ";}; ' \ '{line=$0; FS=":"; $0=$2; secs=$1*3600+$2*60+$3; if (secs>stopts) exit; '\ 'if (secs>=startts) print line; FS=" ";}' file
字元串甚至可以直接比較:
awk -v starttime="12:00:03" -v stoptime="12:00:09" \ '{line=$0; if ($2>stoptime) exit; '\ 'if ($2>=starttime) print line; FS=" ";}' file