中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]这段awk代码为何总是出错?
作者:
标题: [已解决]这段awk代码为何总是出错? 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『楼 主』:  [已解决]这段awk代码为何总是出错?

从前面文件中读出内容,匹配到后面文件里去。前面自动判断需要更正的列的数据所在:
>>%file_s% gawk 'BEGIN{FS="\t";OFS="_"}FILENAME=="list.xls"^&^&FNR==1{for (i=1;i^<66;i++) {if ($i=="Google results") gr=i;if ($i=="Google suggestion") gs=i; if ($i=="Google sponsored #") gsp=i; if ($i=="Google results w/o") grw=i; if ($i=="Google suggestion w/o") gsw=i; if ($i=="Google sponsored # w/o") gspw=i; if ($i=="Google #1 w/o") g1w=i; if ($i=="Google #1 w/") g1=i; if ($i=="URLmatch") um=i;}}FILENAME=="list.xls"^&^&FNR^>1{ggr[$1]=$gr;ggs[$1]=$gs;ggsp[$1]=$gsp;ggrw[$1]=$grw;ggsw[$1]=$gsw;ggspw[$1]=$gspw;gg1w[$1]=$g1w;gg1[$1]=$g1,ugm[$1]=$um;}FILENAME=="%file_s:~0,-1%_gg"{if ($30=="Error" ^|^| $33=="Error"){$30=ggr[$1]; $31=ggs[$1]; $32=ggsp[$1]; $33=ggrw[$1]; $34=ggsw[$1]; $35=ggspw[$1]; $36=gg1w[$1]; $37=gg1[$1]; $58=ugm[$1]} print}' list.xls %file_s:~0,-1%_gg
前面都已经测试过了,但加上后面一段数组改数据后,总是出错,错误信息又不明显,检查n次了,总是看不出错在哪里啊~
高手帮忙检查一下吧,谢谢

[ Last edited by pooronce on 2008-5-27 at 02:44 PM ]

2008-5-23 15:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 2 楼』:  

这是做什么用的?代码太复杂了

2008-5-23 22:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by clian76 at 2008-5-23 10:27 PM:
这是做什么用的?代码太复杂了

查找确认列所在,然后将这些列的数据匹配到后面一个文件里去

2008-5-23 22:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 4 楼』:  

gg1[$1]=$g1,ugm[$1]=$um;}FILENAME=="%file_s:~0,-1%_gg"{if
                  ^
上面就有一处逗号要变分号。

写成awk脚本,多加几个print和错误提示,或许更好发现问题所在,Good luck.

   此帖被 +4 点积分        点击查看详情   
评分人:【 pooronce 分数: +4  时间:2008-5-27 14:15


2008-5-24 12:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by pooronce at 2008-5-23 22:49:
查找确认列所在,然后将这些列的数据匹配到后面一个文件里去

你是在什么环境下使用的这段代码呢?

如果是 CMD 下面,那么这段代码可能运行不了,需要把包含代码的单引号(')改成双引号,而代码里面的双引号需要用反斜线转义(\")。

另外,写代码的时候最好不要写成这种“一句话式”的代码,容易给看代码的人难一种阅读和维护的感觉。

2008-5-24 12:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

另外再多说一句,不是新会员了,发帖的时候应该注意标题应该简洁表意。
先帮你修改过来。

2008-5-24 12:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by junchen2 at 2008-5-24 12:49 PM:
gg1[$1]=$g1,ugm[$1]=$um;}FILENAME=="%file_s:~0,-1%_gg"{if
                  ^
上面就有一处逗号要变分号。

写成awk脚本,多加几个print和错误提示,或许更好发现问题所在,Good luck.

多谢多谢
汗,自己也太大意了这,检查几次都没发现这个逗号的问题。改好后就好了-_-#

之前都郁闷得放弃绕过了,现在终于解决了:D


另请教lxmxn,怎么可以优化啊。另代代码内部能加注释的吗?
据说cmd最大命令长度是1000个字符(求证,这个说法准确吗)。
这里已经到八百多个了,就算能加注释,也行容易撑破1000了:(

2008-5-27 13:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by pooronce at 2008-5-27 13:50:


多谢多谢
汗,自己也太大意了这,检查几次都没发现这个逗号的问题。改好后就好了-_-#

之前都郁闷得放弃绕过了,现在终于解决了:D


另请教 ...

其实你完全可以把这段代码写成一个 awk 脚本,然后由 awk -f script.awk 来调用这个脚本,要传递给 awk 脚本的变量可以用 awk 的-v参数带入脚本。

在脚本里面加注释可以以 # 开头,一句话式的脚本试了一下,貌似无法添加注释。

另外,命令行的长度的确有限制,至于是多少字节已经不记得了,你可以测试一下。

2008-5-28 03:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by lxmxn at 2008-5-28 03:40 AM:

其实你完全可以把这段代码写成一个 awk 脚本,然后由 awk -f script.awk 来调用这个脚本,要传递给 awk 脚本的变量可以用 awk 的-v参数带入脚本。

在脚 ...

像这样的长命令还有很多在用:(
写成awk脚本形式后错误信息会更明了一些吗?
如果是的话我倒是可以考虑用脚本来调试,没错了再转回长命令。

……命令行长度还没试出来过,到目前为止,这个命令是我最长的一个

2008-5-28 09:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by pooronce at 2008-5-28 09:17:


像这样的长命令还有很多在用:(
写成awk脚本形式后错误信息会更明了一些吗?
如果是的话我倒是可以考虑用脚本来调试,没错了再转回长命令 ...

写成脚本不保证错误信息更加详细,但是最起码可以将代码缩进,有利于阅读和维护!

2008-5-28 20:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: