AWK与SHELL脚本中对指定日期处理的异常情况
2013-03-17 17:36
260 查看
对于awk的计算错误,百思不得其解啊。。。详细如下:
PS:有高手见到,请提示下,谢谢
源数据:wqq.txt
awk脚本:wqq1.sh
执行结果:
sh脚本:wqq2.sh
执行结果:
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
相关文章推荐
- Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
- shell脚本中的日期处理
- shell脚本中的日期处理
- shell脚本截取日期处理
- CentOS Linux自动备份文件到远程FTP服务器并删除指定日期前的备份Shell脚本
- shell ts 片时间命名异常情况处理小坑
- shell脚本截取日期处理
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本(二)
- 指定开始和结束日期循环的shell脚本
- 用shell脚本,指定两个日期,计算相隔天数
- shell脚本产生指定时间内的每天日期
- Shell脚本中利用awk处理大批量数据
- shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
- Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本(一)
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
- 记录特殊情况的Python脚本的内存异常与处理
- shell脚本之使用sed和awk进行文本处理
- Debian下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
- shell脚本专家指南--单行文本处理awk