对于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的源值,但日期计算错误
#!/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