2014-10-16 70 views
2

我有一個帶有三個字段的製表符分隔的文本文件:TIMESTAMP,HOSTSTATUS。我需要找到一個主機是否在不到一個小時前被列爲關閉的。到目前爲止,我有這樣的例子:與時間戳相比,我可以搜索結果嗎?

grep "Down" thetextfile.txt | grep "thehostname"

這給了我所有的時間有點列表主機是在日誌中了。涼。現在我想我只需要知道最新的TIMESTAMP是否不到一小時前。我對Linux和Bash腳本編程相當陌生,但在其他實際數據庫工作中,這將是一個相對簡單的查詢。

任何想法?還是有更好的方法?

這裏的日誌文件的例子:

TIMESTAMP  HOST STATUS 
Wed Oct 8 12:16:23 EDT 2014  aserver  Alive 
Wed Oct 8 12:16:23 EDT 2014  anotherserver  Down 

謝謝!

+1

已編輯。我也嘗試過Awk,並且在同一個地方結束了,但那可能是因爲我對Awk還不太瞭解。 – mrcoulson 2014-10-16 14:19:22

+0

是否有可能爲不同的服務器設置不同的時區? – choroba 2014-10-16 14:21:30

+0

沒有。他們都在我們的大樓裏。 – mrcoulson 2014-10-16 14:22:49

回答

2

你可以使用這個bash腳本:

#!/bin/bash 

# current date-time in seconds (epoch) value 
now=$(date '+%s') 

while read -r p; do 
    # ignore 1st row with headers 
    [[ "$p" == *TIMESTAMP* ]] && continue 

    # read 3 values in 3 variables t h s 
    IFS=$'\t' && read t h s <<< "$p" 

    # convert date string to epoch value 
    ts=$(date -d "$t" '+%s') 

    # if date from file is less than 1 hour ago and status is Down then print host name 
    [[ "$s" == "Down" ]] && (((now-ts) < 3600)) && echo "$h" 
done < file 
+1

爲了方便其他同事,我調整了一下條件部分的佈局,但是這比'gawk'解決方案更好,因爲它更容易適合我們的腳本。儘管如此,兩者都是很酷的想法。萬分感謝! – mrcoulson 2014-10-16 17:49:22

+0

不客氣,很高興爲你解決問題。 – anubhava 2014-10-16 17:50:00

2

我會使用GNU AWK:

gawk -v status=Down -v host=anotherserver ' 
    BEGIN { 
     mo["Jan"]=1; mo["May"]=5; mo["Sep"]=9 
     mo["Feb"]=2; mo["Jun"]=6; mo["Oct"]=10 
     mo["Mar"]=3; mo["Jul"]=7; mo["Nov"]=11 
     mo["Apr"]=4; mo["Aug"]=8; mo["Dec"]=12 
    } 
    function elapsed(month, day, time, year) { 
     gsub(/:/, " ", time) 
     return systime() - mktime(sprintf("%d %02d %02d %s", year, mo[month], day, time)); 
    } 
    $NF == status && $(NF-1) == host && elapsed($2,$3,$4,$6) < 3600 
' <<DATA 
TIMESTAMP  HOST STATUS 
Wed Oct 8 12:16:23 EDT 2014  aserver  Alive 
Wed Oct 8 12:16:23 EDT 2014  anotherserver  Down 
Wed Oct 16 10:16:23 EDT 2014  aserver  Alive 
Wed Oct 16 10:16:23 EDT 2014  anotherserver  Down 
Wed Oct 16 10:16:23 EDT 2014  aserver  Down 
Wed Oct 16 10:16:23 EDT 2014  anotherserver  Up 
DATA 
Wed Oct 16 10:16:23 EDT 2014  anotherserver  Down 

當前日期是週四10月16日10時53分45秒EDT 2014

相關問題