中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 20:10
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决]这段awk代码为何总是出错?
可打印版本  854 / 9
第1楼 pooronce 发表于 2008-05-23 15:30
中级用户 发帖 250 积分 484
[已解决]这段awk代码为何总是出错?
从前面文件中读出内容,匹配到后面文件里去。前面自动判断需要更正的列的数据所在:



前面都已经测试过了,但加上后面一段数组改数据后,总是出错,错误信息又不明显,检查n次了,总是看不出错在哪里啊~
高手帮忙检查一下吧,谢谢

[ Last edited by pooronce on 2008-5-27 at 02:44 PM ]
第2楼 clian76 发表于 2008-05-23 22:27
中级用户 发帖 162 积分 363
这是做什么用的?代码太复杂了
第3楼 pooronce 发表于 2008-05-23 22:49
中级用户 发帖 250 积分 484
Originally posted by clian76 at 2008-5-23 10:27 PM:
这是做什么用的?代码太复杂了


查找确认列所在,然后将这些列的数据匹配到后面一个文件里去
第4楼 junchen2 发表于 2008-05-24 12:49
高级用户 发帖 219 积分 537 来自 杭州--半山
gg1[$1]=$g1,ugm[$1]=$um;}FILENAME=="%file_s:~0,-1%_gg"{if
^
上面就有一处逗号要变分号。

写成awk脚本,多加几个print和错误提示,或许更好发现问题所在,Good luck.
第5楼 lxmxn 发表于 2008-05-24 12:50
版主 发帖 4,938 积分 11,386
Originally posted by pooronce at 2008-5-23 22:49:
查找确认列所在,然后将这些列的数据匹配到后面一个文件里去

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

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

另外,写代码的时候最好不要写成这种“一句话式”的代码,容易给看代码的人难一种阅读和维护的感觉。
第6楼 lxmxn 发表于 2008-05-24 12:52
版主 发帖 4,938 积分 11,386
另外再多说一句,不是新会员了,发帖的时候应该注意标题应该简洁表意。
先帮你修改过来。
第7楼 pooronce 发表于 2008-05-27 13:50
中级用户 发帖 250 积分 484
Originally posted by junchen2 at 2008-5-24 12:49 PM:
gg1=$g1,ugm=$um;}FILENAME=="%file_s:~0,-1%_gg"{if
^
上面就有一处逗号要变分号。

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


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

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


另请教lxmxn,怎么可以优化啊。另代代码内部能加注释的吗?
据说cmd最大命令长度是1000个字符(求证,这个说法准确吗)。
这里已经到八百多个了,就算能加注释,也行容易撑破1000了:(
第8楼 lxmxn 发表于 2008-05-28 03:40
版主 发帖 4,938 积分 11,386
Originally posted by pooronce at 2008-5-27 13:50:


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

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


另请教 ...

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

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

另外,命令行的长度的确有限制,至于是多少字节已经不记得了,你可以测试一下。
第9楼 pooronce 发表于 2008-05-28 09:17
中级用户 发帖 250 积分 484
Originally posted by lxmxn at 2008-5-28 03:40 AM:

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

在脚 ...


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

……命令行长度还没试出来过,到目前为止,这个命令是我最长的一个
第10楼 lxmxn 发表于 2008-05-28 20:55
版主 发帖 4,938 积分 11,386
Originally posted by pooronce at 2008-5-28 09:17:


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

写成脚本不保证错误信息更加详细,但是最起码可以将代码缩进,有利于阅读和维护!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023