2017-10-10 199 views
1

我想用下面的格式與當前日期比較shell腳本中的文件中的日期並返回一些標誌。格式的日期比較

Sep 15 2017 11:04AM 

Sep 16 2017 10:07AM 

Sep 19 2017 11:44AM 

Sep 20 2017 10:08AM 

Sep 21 2017 10:03AM 

awk腳本可以在這裏使用。

+0

你好,你想要什麼樣的比較作出的,什麼是你想要的結果,有什麼標誌要漲到做。 –

+0

我有一個數據的文件,如果有一個字段與上述格式的日期。我想比較當前日期和文件中的日期,並將包含7天以前日期的行重定向到一個新文件中。 ' – ninja67

+0

'比較文件中的日期'你能告訴我們該文件是怎麼樣的嗎? –

回答

0

假設包含日期的文件看起來像這樣:

$ cat file1 
Sep 15 2017 11:04AM 
Sep 16 2017 10:07AM 
Sep 19 2017 11:44AM 
Sep 20 2017 10:08AM 
Sep 21 2017 10:03AM 
Oct 02 2017 10:03AM 
Oct 05 2017 10:03AM 
Oct 07 2017 10:03AM 

使用此爲GNU日期

cat file1 | xargs [email protected] bash -c " \ 
    seven_days_ago=$(date --date='7 days ago' +%s); \ 
    input=\$(date --date=\"@\" +%s); \ 
    if [ \"\$seven_days_ago\" -gt \"\$input\" ]; then \ 
     echo \"@\"; \ 
    fi;" 

這對於BSD日期

cat file1 | xargs [email protected] bash -c " \ 
    seven_days_ago=$(date -v-7d +%s); \ 
    input=\$(date -j -f \"%b %d %Y %R%p\" \"@\" +%s); \ 
    if [ \"\$seven_days_ago\" -gt \"\$input\" ]; then \ 
     echo \"@\"; \ 
    fi;" 

輸出如下。這降低了10月5日和07日比7天更接近的日期。

Sep 15 2017 11:04AM 
Sep 16 2017 10:07AM 
Sep 19 2017 11:44AM 
Sep 20 2017 10:08AM 
Sep 21 2017 10:03AM 
Oct 02 2017 10:03AM 

你怎麼GNU日期和BSD日期區分?

要檢查執行:

$ man date | tail -n 1 
GNU coreutils 8.22 

VS

$ man date | tail -n 1 
BSD        August 16, 2007       BSD 
+0

該文件包含的細節象下面這樣: 'code' asdffsdvdsds,sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日11:04 asdffsdvdsds,sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日11:04 asdffsdvdsds, sdffsfdswe,123142121,adf123,12341411sdcscr,2017年9月15日上午11點04 'code' 同樣,當前代碼給出了下面的錯誤: 日期:無效日期 bash中:行0:[::整數表達預期 – ninja67

+0

@ ninja67你檢查了你正在運行的日期命令嗎?執行'man date | tail -n 1' –

+0

@ ninja67我已經擴展了我的答案來處理兩個日期命令。如果你仍然有問題,請看看並告訴我。 –