我有以下输入,我想选择从现在到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
所以如果我想从现在开始想要2个星期就可以获得所需的输出
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
答案 0 :(得分:0)
一种方式:
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
其中n表示周数
split($2,a,"/")
=&gt;在/
的基础上拆分第二列并存储在数组a
split($3,b,":")
=&gt;在:
的基础上拆分第3列并存储在数组b
mktime =&gt;以秒为单位给出时间
x包含文件中的时间(以秒为单位)
y包含以秒为单位的当前时间
答案 1 :(得分:0)
以下是一个使用bash的解决方案,其中file
是您文件的名称:
while read r; do dd=$(($(date -d "${r:6}" +%s) - $(date +%s))); echo $(($dd/(3600*24))); done < file
这将计算${r:6}
(当前行的子字符串)和今天的日期$(date +%s)
中的日期之间的日期差异,并将其转换为天数。
仅输出日期差异小于2周(1209600秒)的行
while read r; do dd=$(($(date -d "${r:6}" +%s) - $(date +%s))); if [ "$dd" -lt 1209600 ]; then echo $r; fi; done < file
答案 2 :(得分:0)
这很好用,如果有人有任何其他更简单的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