您的位置:首页 > 运维架构 > Shell

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

2013-03-17 17:36 260 查看
对于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: