2017-08-17 15 views
0

我正在處理腳本以便在用戶提示時獲取此日誌的最後五分鐘10:07:30。我該怎麼做這個bash? Give是我腳本的一部分。在elb日誌文件bash中獲取過去5分鐘的數據

2017-07-19T10:00:37.306805Z elb-sam30-ftpoc-prod 35.163.110.235:58814 10.0.2.203:80 0.000042 0.000579 0.00002 200 200 0 809 2017-07-19T10:01:56.572506Z elb-sam30-ftpoc-prod 35.163.110.235:58870 10.0.2.203:80 0.000038 0.000603 0.000019 200 200 0 809 2017-07-19T10:02:15.628179Z elb-sam30-ftpoc-prod 35.163.110.235:58904 10.0.2.203:80 0.000044 0.000583 0.00002 200 200 0 809 2017-07-19T10:03:34.875186Z elb-sam30-ftpoc-prod 35.163.110.235:58958 10.0.2.203:80 0.00004 0.000597 0.00002 200 200 0 809 2017-07-19T10:04:27.468370Z elb-sam30-ftpoc-prod 35.163.110.235:59400 10.0.2.203:80 0.000065 0.000513 0.000019 200 200 0 809 2017-07-19T10:05:46.601192Z elb-sam30-ftpoc-prod 35.163.110.235:59446 10.0.2.203:80 0.000057 0.000544 0.000021 200 200 0 809 2017-07-19T10:06:05.782121Z elb-sam30-ftpoc-prod 35.163.110.235:59492 10.0.2.203:80 0.000044 0.000667 0.00002 200 200 0 809 2017-07-19T10:07:24.983365Z elb-sam30-ftpoc-prod 35.163.110.235:59546 10.0.2.203:80 0.000041 0.000434 0.000019 200 200 0 809 2017-07-19T10:08:00.975682Z elb-sam30-ftpoc-prod 35.163.110.235:59794 10.0.2.203:80 0.000037 0.000521 0.000019 200 200 0 809 2017-07-19T10:09:20.152264Z elb-sam30-ftpoc-prod 35.163.110.235:59842 10.0.2.203:80 0.000045 0.000571 0.00002 200 200 0 809

+0

如果通過rsyslogd寫入日誌文件並且系統正在運行systemd,則可以使用帶有--since標誌的journalctl。 –

+0

這是一個外部日誌文件 –

+0

所以你想在10:07:30(或任何用戶輸入)顯示5分鐘或更短的時間?那日期呢? –

回答

0
dat="Thu Aug 17 10:07:11 IST 2017" 
dat1=$(sed -rn 's/([[:alpha:]]{3}[[:blank:]][[:alpha:]]{3}[[:blank:]][[:digit:]]{2}[[:blank:]])(.*)(IST)(.*$)/\1\4 \2/p' <<< $dat) 
edat=$(date -d "$dat1" +%s) 
awk -v rdat=$edat '{ram1=substr($1,1,4)" "substr($1,6,2)" "substr($1,9,2)" "substr($1,12,2)" "substr($1,15,2)" "substr($1,18,2);ram1=mktime(ram1);ram=rdat-(60*5); if (ram1 >= ram) { print $0 } }' logfile 

AWK細分:

{  ram1=mktime(substr($1,1,4)" "substr($1,6,2)" "substr($1,9,2)" "substr($1,12,2)" "substr($1,15,2)" "substr($1,18,2)) 
     ram=rdat-(60*5) 
     if (ram1 >= ram) { 
       print $0 
     } 
} 

我們首先分析與SED的日期達到的格式的日期,那麼我們可以通過命令日期讓我們達到日期格式(自紀元以來的秒數)。然後將這個變量edat作爲變量rdat傳遞給awk。這個日期減去了五分鐘(60 * 5),然後在日誌文件中的日期與mktime函數一起轉換爲紀元後與日期文件中的日期進行比較。

+0

謝謝你Ram的腳本。我不明白子串部分和它的值。你能否提供一些參考資料。 –

+0

substr($ 1,1,4)表示採用第一個空格分隔字段,即「2017-07-19T10:00:37.306805Z」,然後從第一個字段中提取4個字符。結果將是2017年。下一個substr命令是獲取月份,然後是一天......等等。 –

+0

我試着執行腳本,但不能得到任何輸出。如果可能,請您告訴步驟使用和調試腳本。 –

相關問題