2014-01-27 148 views
-1
previousDay=`date +"%Y-%m-%d" -d "-1 day"` 
finish_time1=$(grep -o -m1 "$previousDay [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" sample.txt) 

在這裏,我試圖找出給人一種date.Here最接近的前日期sample.txt的內容,以獲取從文件讀取特定日期之前的日期如何使用shell腳本

2013-11-07 15:53:49 HB Thread alive (1) 
    2013-11-07 15:53:49 heartBeatCallback starting fireHeartBeat 
    2013-11-07 15:53:50 refreshPollingTime END 
    2013-11-07 15:53:50 heartBeatCallback testing childpid 
    2014-01-24 15:53:50 heartBeatCallback end 
    2014-01-25 15:53:50 HB end callback call 
    2014-01-25 15:53:50 uploadTSLog TS_LOG_FILE is /public/tmp/testomatic/ts_logs/2013-11- 07_08-21-19_ONEOS90-VOIP_SIP_11N_FT-V5.1R5E12_NB83163_FT4_T10_112741.log 
    2014-01-27 15:53:50 uploadTSLog: no new logs to upload 
    2014-01-27 15:54:50 HB going to sleep */ 
+0

所以這豈不工作? – hashbrown

+0

我想要得到給定date.ex的前一天:給定日期爲2014-01-27,我希望下一前一天爲2014-01-25 – user3165241

+0

不知道我是否正確回答問題... if給定日期是'2014-01-27',你想'2014-01-25',爲什麼不把''-1 day「'部分改爲''-2 day''? – hashbrown

回答

1

[編輯2:試圖回答真正的問題:發現,給定一個日期,最後的日誌行只是在該日期前...]

Date="2014-01-24" 
awk -v d=$Date ' 
    ($1 < d) { previous=$0 ; } 
    ($1 >=d) { print previous ; exit ; } 
    ' sample.txt 

這OUTP UTS:

2013-11-07 15:53:50 heartBeatCallback testing childpid 

====如下:由於歷史的原因,我以前的答案,想着給定日期...... ====

[編輯你想要的「前一天」:它是第一天,而不是第二天。通過另一個60 * 60 * 24秒容易修改第2天]

您需要從日期中找到「第-1天」。

我讓你做一些「男人日」,所以我只是給你的程序,不要做

只是

  • 轉換日期的具體辦法「紀元以來的秒數」,
  • 然後取出'超過一天,但少於2'(例如,從它檢索60 * 60 * 24秒+10000秒,例如),
  • 它會給你一個時間(從Epoch開始以秒計)在「第-1天」範圍內,
  • 和轉換回,​​自從大紀元secondes到相應的日期
+0

感謝您的答案@Olivier Dulac,但動態我有搜索任何給定的日期前一天的文件,在張貼的例子中,我正在採取昨天的日期爲給定的日期和試圖在文件 – user3165241

+0

@ user3165241中找出以前的日期:一旦你確定了「第一天」,只需使用「date + ...」檢索日期,月份和年份的信息,並使用這些信息在文件中grep。 –

+0

文件必須以相反順序讀取,才能找出日期小於給定日期 – user3165241

0
finish_time=0 
previousDay=`date +"%Y-%m-%d" -d "-1 day"` 
if [ $finish_time -eq 0 ]; then 
tac logfile.txt | 
(
while read line 
do 
finish_time=`echo $line | sed -e 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9] [0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/'` 
file_content_date=`date -d "$finish_time" +%Y%m%d` 
comparison_prev_date=`date -d "$previousDay" +%Y%m%d` 
if [ $comparison_prev_date -ge $file_content_date ]; then 
comparison_end_date=$(date -d "$file_content_date" +%Y%m%d) 
break 
fi 

新的金額進行 ) 網絡