2017-03-27 55 views
0

我想過濾一個文件,並刪除(或寫入另一個文件),只有那些日期是「真正」小於日期的字符串,比如說2小時30分鐘前(150分鐘)。我不需要可以找到絕對值「2017-03-21 04:36:19」的命令 - 然後刪除所有行。因爲線條不存在的機率很大(秒,然後分鐘,並且此過濾器不刪除所有文件)。最近幾分鐘的過濾日誌小時

我在旁邊格式的數據:

2017-03-18 01:27:12 bla bla 
2017-03-18 02:14:11 bla bla 
2017-03-20 04:37:14 bla bla 
2017-03-21 02:25:59 bla bla 
2017-03-22 05:12:43 bla bla 

時間格式: %Y-%間%d%H:%M:%S

我在谷歌搜索,並嘗試一切在許多搜索查詢的第一頁上。

+3

參見:[查找時間跨度例如內日誌文件條目。最後一小時](http://stackoverflow.com/q/7706095/3776858) – Cyrus

+0

什麼問題?你正在使用一個合理的日期格式,所以你可以簡單地使用字符串比較。 –

+0

*小於日期現在,比如說2小時30分鐘前(150分鐘)* - 好吧,今天是'2017-03-27'。他們都更小 – RomanPerekhrest

回答

1

在awk中:

awk ' 
BEGIN{ now=systime() }  # now in seconds 
{ 
    then=$1 " " $2   # then might not be a good var name though :) 
    gsub(/[-:]/," ",then) # making mktime fit variable out of then 
    then=mktime(then)  # then then to seconds 
    if(then < now-604800) # compare, 604800 is 7 days in seconds 
     print    # output older than that 
}' file 
2017-03-18 01:27:12 bla bla 
2017-03-18 02:14:11 bla bla 
2017-03-20 04:37:14 bla bla 
+0

謝謝!它的作品也(不是爲了我的目標)。 它給我大7天。太好了。也許存在awk的「反向」選項,如'sed',所以它可以給出7天或150分鐘。 – Amaroc

+0

@Amaroc只需要更改代碼中的604800(以秒爲單位),我必須使用這樣的值,因爲您的數據是這樣的。如果你只想要150分鐘以上:'if(then> now-9000)'。 –

+0

再次感謝您的幫助,我會用這個(這個簡單的閱讀): awk -vdate = $(date -d「150 minutes ago」'+%Y-%m-%d%H:% M:%S')\ '$ 1 $ 2> = date {print}'log 但您的方法也不錯,而且我看到它可以解析另一個日期格式[ - :] /,「」所以它很可愛! – Amaroc

2
awk -vdate=$(date -d "150 minutes ago" '+%Y-%m-%d%H:%M:%S') \ 
    '$1$2 >= date { print }' log 
+0

OMG,你是天才嗎,我用相同的語法來使用相同的「命令」,但它永遠不會工作。非常感謝你! – Amaroc

+0

@Amaroc不客氣。 –

相關問題