2014-02-25 28 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