2014-02-25 55 views
0

我有一個文件,說FILE.TXT有內容如下與SYSDATE進行比較的UNIX

XYZ_2-3-2013 
ABC_12-11-2013 
TWP_1-1-2014 
UTR_2-2-2014 
. 
. 
. 

等。 我後綴部分是日期部分。 現在我需要檢查哪些內容有30天或更長時間。 例如:按照上述文件中的下面裝有舊30天或更多天:

XYZ_2-3-2013 
ABC_12-11-2013 
TWP_1-1-2014 

由於它需要用SYSDATE進行比較。 你能幫我在sciprt找到這個嗎?

最好的問候, Quaish

+1

當你用這種方式表示日期時,我們不知道哪些部分是月份,哪些部分是日子! [請考慮在軟件中僅使用YYYY-MM-DD](http://en.wikipedia.org/wiki/ISO_8601)。也就是說,你的問題是m-d-yyyy還是d-m-yyyy? –

+0

@RayToal,儘量在你的答案中保持靈活性;-)但是,當你要求OP澄清時,你當然是對的。其在d-m-yyyy中爲 – Alfe

+0

。這是Powercenter爲備份文件夾生成的日期格式。我只能用這個。 – user3350121

回答

1

試試這個:

while IFS=_- read x month day year 
do 
    [ "$(date -d "$year-$month-$day" +%s)" -lt "$(date -d "today - 30 days" +%s)" ] && 
    echo "${x}_$month-$day-$year is more than 30 days ago" 
done < inputfile.txt 

對於我來說,輸出:

XYZ_2-3-2013 is more than 30 days ago 
ABC_12-11-2013 is more than 30 days ago 
TWP_1-1-2014 is more than 30 days ago 

如果您的日期格式日 - 月 - 年,只是交換read的變量名稱:

read x day month year 

這假定您正在使用Gnu date(或任何其他了解+%s格式化選項)。

+0

嗨Alfe, 感謝您的快速響應。 好,exceuting我對着下面錯誤的腳本後: **日期:沒有一個公認的標誌:d 用法:日[-u] [+「現場描述符」] ** 能否請您看看這個? Regards, Quaish – user3350121

+0

我擔心你有一個'date'二進制文件,它沒有打印_specific_ date的特性: - /你在什麼系統上? – Alfe

+0

無論如何,我的解決方案完全取決於'日期'這個'date'缺少的特性,您將無法使用我的解決方案,對不起。 – Alfe