中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 是BUG吗?长命令套到if的括号中会出错
作者:
标题: 是BUG吗?长命令套到if的括号中会出错 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『楼 主』:  是BUG吗?长命令套到if的括号中会出错


>%lfdat%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;b[$1]=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u[ks]\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^[0-9]+$/){sum+=$2;sz+=1;} if ($5~/^^[0-9]+$/){sum+=$5;sz+=1} if ($6~/^^[0-9]+$/){sum+=$6;sz+=1} if ($7~/^^[0-9]+$/){sum+=$7;sz+=1} if ($8~/^^[0-9]+$/){sum+=$8;sz+=1} if ($9~/^^[0-9]+$/){sum+=$9;sz+=1} if ($12~/^^[0-9]+$/){sum+=$12;sz+=1} if ($13~/^^[0-9]+$/){sum+=$13;sz+=1} if ($14~/^^[0-9]+$/){sum+=$14;sz+=1} if ($15~/^^[0-9]+$/){sum+=$15;sz+=1} if ($16~/^^[0-9]+$/){sum+=$16;sz+=1} if ($17~/^^[0-9]+$/){sum+=$17;sz+=1} if ($18~/^^[0-9]+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error") {$26=a[$1];$27=b[$1]} if (sz!=0) $54=sum/sz; if ($43~/^^[Yy]$/) {$41="F";$42="F"}print}}}' al.xls %lfdat:~-8%s.bak


IF NOT %week%==星期一 goto :skipthis
>%ldate%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;b[$1]=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u[ks]\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^[0-9]+$/){sum+=$2;sz+=1;} if ($5~/^^[0-9]+$/){sum+=$5;sz+=1} if ($6~/^^[0-9]+$/){sum+=$6;sz+=1} if ($7~/^^[0-9]+$/){sum+=$7;sz+=1} if ($8~/^^[0-9]+$/){sum+=$8;sz+=1} if ($9~/^^[0-9]+$/){sum+=$9;sz+=1} if ($12~/^^[0-9]+$/){sum+=$12;sz+=1} if ($13~/^^[0-9]+$/){sum+=$13;sz+=1} if ($14~/^^[0-9]+$/){sum+=$14;sz+=1} if ($15~/^^[0-9]+$/){sum+=$15;sz+=1} if ($16~/^^[0-9]+$/){sum+=$16;sz+=1} if ($17~/^^[0-9]+$/){sum+=$17;sz+=1} if ($18~/^^[0-9]+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error") {$26=a[$1];$27=b[$1]} if (sz!=0) $54=sum/sz; if ($43~/^^[Yy]$/) {$41="F";$42="F"}print}}}' al.xls %ldate:~-8%s.bak

>%ldat1%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;b[$1]=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u[ks]\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^[0-9]+$/){sum+=$2;sz+=1;} if ($5~/^^[0-9]+$/){sum+=$5;sz+=1} if ($6~/^^[0-9]+$/){sum+=$6;sz+=1} if ($7~/^^[0-9]+$/){sum+=$7;sz+=1} if ($8~/^^[0-9]+$/){sum+=$8;sz+=1} if ($9~/^^[0-9]+$/){sum+=$9;sz+=1} if ($12~/^^[0-9]+$/){sum+=$12;sz+=1} if ($13~/^^[0-9]+$/){sum+=$13;sz+=1} if ($14~/^^[0-9]+$/){sum+=$14;sz+=1} if ($15~/^^[0-9]+$/){sum+=$15;sz+=1} if ($16~/^^[0-9]+$/){sum+=$16;sz+=1} if ($17~/^^[0-9]+$/){sum+=$17;sz+=1} if ($18~/^^[0-9]+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error") {$26=a[$1];$27=b[$1]} if (sz!=0) $54=sum/sz; if ($43~/^^[Yy]$/) {$41="F";$42="F"}print}}}' al.xls %ldat1:~-8%s.bak

:skipthis
如上,后面两个文件的处理,如果直接用IF %week%==星期一 然后括号套住,就总是会出错,提示“此时不应有print“,print位置改过多次,皆无效。后来把if的套子修改成上面那NOT并skip过就正常了。 百思不得其解,请问这个是cmd的一个bug吗?或者还是我自己没处理好呢?

另,请问上面的命令能优化吗,其作用是求某些不连续范围的格子里,将存在数据的求平均值,类似Excel里的average命令。然后将al里的部分匹配到固定列的Error的地方。

麻烦各位帮助看一下,谢谢

2008-3-18 18:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: