AWK与SHELL脚本中对指定日期处理的异常情况

对于awk的计算错误,百思不得其解啊。。。详细如下:

PS:有高手见到,请提示下,谢谢


源数据:wqq.txt

86216074|8009|20130301010303|15|2160||FID_FIX_3MOIS3|
86216074|8009|20130302020303|15|2160||FID_FIX_3MOIS3|
86216074|8009|20130303030303|15|2160||FID_FIX_3MOIS3|
86727780|8009|20130204010230|15|2160||FID_FIX_3MOIS3|
86977828|8024|20130227030230|90|2160||FID_FIXIN_3MOIS3|
81057519|8024|20130321050321|90|2160||FID_FIXIN_3MOIS3|
86727780|8009|20130324010321|15|2160||FID_FIX_3MOIS3|
86727780|8009|20130219010230|15|2160||FID_FIX_3MOIS3|
86977828|8024|20130227030230|90|2160||FID_FIXIN_3MOIS3|
86727780|8009|20130204010321|15|2160||FID_FIX_3MOIS3|


awk脚本:wqq1.sh

awk 'BEGIN{
	 FS="|";
	 OFS="|";
    }{
      if(FILENAME ~ /wqq.txt/)
      {                              
      	if($6=="")
        {
            "date -d '\''"substr($3,0,8)" +20 day'\'' +%Y%m%d"|getline newdate #日期处理
            $6=newdate""substr($3,9)
            print $3"--+20 day--->"$6
        }		
      }
     }' wqq.txt

执行结果:

Server:/usr # ./wqq1.sh
20130301010303--+20 day--->20130321010303
20130302020303--+20 day--->20130322020303
20130303030303--+20 day--->20130323030303
20130204010230--+20 day--->20130224010230       --1.正确
20130227030230--+20 day--->20130319030230       --2.正确
20130321050321--+20 day--->20130410050321
20130324010321--+20 day--->20130413010321
20130219010230--+20 day--->20130311010230
20130227030230--+20 day--->20130311030230        --同上面2的源值,但日期计算错误
20130204010321--+20 day--->20130311010321        --同上面1的源值,但日期计算错误


sh脚本:wqq2.sh
#!/bin/ksh

OLD_IFS="$IFS"
IFS="|"

while read line
do
	arr=($line)
	olddate=${arr[2]:0:8}
	newdate=`date -d "$olddate +20 day" +%Y%m%d`     #日期处理
        echo ${arr[2]}"--+20 day--->"$newdate${arr[2]:8}
done < wqq.txt

IFS="$OLD_IFS"

执行结果:

Server:/usr # ./wqq2.sh
20130301010303--+20 day--->20130321010303
20130302020303--+20 day--->20130322020303
20130303030303--+20 day--->20130323030303
20130204010230--+20 day--->20130224010230     --1.正确
20130227030230--+20 day--->20130319030230     --2.正确
20130321050321--+20 day--->20130410050321
20130324010321--+20 day--->20130413010321
20130219010230--+20 day--->20130311010230
20130227030230--+20 day--->20130319030230     --日期计算正确,同2
20130204010321--+20 day--->20130413010321     --日期计算正确,同1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值