Date 选择日期范围的文本处理

Date 选择日期范围的文本处理,date,awk,sed,aix,text-processing,Date,Awk,Sed,Aix,Text Processing,我有下面的输入,我想选择从现在到2周或3周等日期的行 0029L5 08/19/2017 00:57:33 0182L5 08/19/2017 05:53:57 0183L5 02/17/2018 00:00:16 0091L5 10/19/2022 00:00:04 0045L5 07/27/2017 09:03:56 0059L5 08/14/2017 00:51:50 0100L5 08/20/2017 01:25:39 0111L5 08/21/2017 00:46:15 0128L5

我有下面的输入,我想选择从现在到2周或3周等日期的行

0029L5 08/19/2017 00:57:33
0182L5 08/19/2017 05:53:57
0183L5 02/17/2018 00:00:16
0091L5 10/19/2022 00:00:04
0045L5 07/27/2017 09:03:56
0059L5 08/14/2017 00:51:50
0100L5 08/20/2017 01:25:39
0111L5 08/21/2017 00:46:15
0128L5 08/21/2017 12:38:51
D00054 07/21/2017 09:01:19
因此,如果我想从现在开始的两周内得到所需的输出

0045L5 07/27/2017 09:03:56
D00054 07/21/2017 09:01:19
但是如果我想要4周,那么输出应该是

0045L5 07/27/2017 09:03:56
0059L5 08/14/2017 00:51:50
D00054 07/21/2017 09:01:19
单向:

awk '{split($2,a,"/");split($3,b,":"); x=mktime(a[3]" "a[1]" "a[2]" "b[1]" "b[2]" "b[3]);y=systime();}x>y && x<(y+(n*7*24*60*60))' n=2 file

awk'{split($2,a,“/”);split($3,b,“:”);x=mktime(a[3]”“a[1]”“a[2]”“b[1]”“b[2]”“b[3]);y=systime();}x>y&&x这里有一个使用bash的解决方案,其中
file
是您的文件名:

while read r; do dd=$(($(date -d "${r:6}" +%s) - $(date +%s))); echo $(($dd/(3600*24))); done < file

这很好,如果有人有其他更简单的AIX解决方案,请告诉我

awk '{split($2,a,"/");split($3,b,":"); print $1,b[3],b[2],b[1],a[2],a[1],a[3]}' /tmp/TLD_1 | head -10 | while read media sec min hour day mon year;  do month=$((10#$mon-1)); expiry=$(perl -e 'use Time::Local; print timegm(@ARGV[0,1,2,3], $ARGV[4], $ARGV[5]), "\n";' $sec $min $hour $day $month $year); current=$(date +%s); twoweeks=$(($current + (2*7*24*60*60))); if [ "$expiry" -gt "$current" -a "$expiry" -lt "$twoweeks" ]; then echo "$media $mon/$day/$year $hour:$min:$sec"; fi; done

绝对不是塞德。您尝试了什么,您遇到了什么困难?现在日期总是最后一行吗?我尝试使用Guru的AIX解决方案,我尝试计算纪元时间,因为AIX awk不支持mktime,但是,我没有得到任何公式来应用于将给定日期转换为纪元时间进行比较。使用其他脚本语言(如Python或Perl)可能更容易。我可以使用Perl计算纪元时间,并使用它与当前纪元时间进行比较。我正在尝试拆分第2列和第3列,以获得$sec、$min、$hour、$mday$month$year,这样就可以使用perl-e'use time::Local计算历元时间;打印时间GM(56,3,9,27,07-12017),“\n”中不支持日期-dAIX@Sid尝试删除日期/时间规范中的
-d
日期:0551-402无效字符日期:0551-003您必须是root用户或授权用户才能更改日期。获取此错误AIX中不支持日期函数MKTIME和systime,我正在尝试将时间解释为要比较的历元时间。仍在尝试将日期转换为历元时间以与日期+%s进行比较,但我没有得到任何数学公式,由于日期-d'+%s在AIXIf中不受支持,因此您可以使用perl,然后用perl完成全部工作。如果您创建一个问题并用perl标记它,我相信您会得到答案。
awk '{split($2,a,"/");split($3,b,":"); print $1,b[3],b[2],b[1],a[2],a[1],a[3]}' /tmp/TLD_1 | head -10 | while read media sec min hour day mon year;  do month=$((10#$mon-1)); expiry=$(perl -e 'use Time::Local; print timegm(@ARGV[0,1,2,3], $ARGV[4], $ARGV[5]), "\n";' $sec $min $hour $day $month $year); current=$(date +%s); twoweeks=$(($current + (2*7*24*60*60))); if [ "$expiry" -gt "$current" -a "$expiry" -lt "$twoweeks" ]; then echo "$media $mon/$day/$year $hour:$min:$sec"; fi; done