标题: [已解决]这段awk代码为何总是出错?
[打印本页]
作者: pooronce
时间: 2008-5-23 15:30
标题: [已解决]这段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=$gr;ggs=$gs;ggsp=$gsp;ggrw=$grw;ggsw=$gsw;ggspw=$gspw;gg1w=$g1w;gg1=$g1,ugm=$um;}FILENAME=="%file_s:~0,-1%_gg"{if ($30=="Error" ^|^| $33=="Error"){$30=ggr; $31=ggs; $32=ggsp; $33=ggrw; $34=ggsw; $35=ggspw; $36=gg1w; $37=gg1; $58=ugm} print}' list.xls %file_s:~0,-1%_gg
前面都已经测试过了,但加上后面一段数组改数据后,总是出错,错误信息又不明显,检查n次了,总是看不出错在哪里啊~
高手帮忙检查一下吧,谢谢
Last edited by pooronce on 2008-5-27 at 02:44 PM ]
作者: clian76
时间: 2008-5-23 22:27
这是做什么用的?代码太复杂了
作者: pooronce
时间: 2008-5-23 22:49
Originally posted by clian76 at 2008-5-23 10:27 PM:
这是做什么用的?代码太复杂了
查找确认列所在,然后将这些列的数据匹配到后面一个文件里去
作者: junchen2
时间: 2008-5-24 12:49
gg1[$1]=$g1,ugm[$1]=$um;}FILENAME=="%file_s:~0,-1%_gg"{if
^
上面就有一处逗号要变分号。
写成awk脚本,多加几个print和错误提示,或许更好发现问题所在,Good luck.
作者: lxmxn
时间: 2008-5-24 12:50
Originally posted by pooronce at 2008-5-23 22:49:
查找确认列所在,然后将这些列的数据匹配到后面一个文件里去
你是在什么环境下使用的这段代码呢?
如果是 CMD 下面,那么这段代码可能运行不了,需要把包含代码的单引号(')改成双引号,而代码里面的双引号需要用反斜线转义(\")。
另外,写代码的时候最好不要写成这种“一句话式”的代码,容易给看代码的人难一种阅读和维护的感觉。
作者: lxmxn
时间: 2008-5-24 12:52
另外再多说一句,不是新会员了,发帖的时候应该注意标题应该简洁表意。
先帮你修改过来。
作者: pooronce
时间: 2008-5-27 13:50
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了:(
作者: lxmxn
时间: 2008-5-28 03:40
Originally posted by pooronce at 2008-5-27 13:50:
多谢多谢
汗,自己也太大意了这,检查几次都没发现这个逗号的问题。改好后就好了-_-#
之前都郁闷得放弃绕过了,现在终于解决了:D
另请教 ...
其实你完全可以把这段代码写成一个 awk 脚本,然后由 awk -f script.awk 来调用这个脚本,要传递给 awk 脚本的变量可以用 awk 的-v参数带入脚本。
在脚本里面加注释可以以 # 开头,一句话式的脚本试了一下,貌似无法添加注释。
另外,命令行的长度的确有限制,至于是多少字节已经不记得了,你可以测试一下。
作者: pooronce
时间: 2008-5-28 09:17
Originally posted by lxmxn at 2008-5-28 03:40 AM:
其实你完全可以把这段代码写成一个 awk 脚本,然后由 awk -f script.awk 来调用这个脚本,要传递给 awk 脚本的变量可以用 awk 的-v参数带入脚本。
在脚 ...
像这样的长命令还有很多在用:(
写成awk脚本形式后错误信息会更明了一些吗?
如果是的话我倒是可以考虑用脚本来调试,没错了再转回长命令。
……命令行长度还没试出来过,到目前为止,这个命令是我最长的一个
作者: lxmxn
时间: 2008-5-28 20:55
Originally posted by pooronce at 2008-5-28 09:17:
像这样的长命令还有很多在用:(
写成awk脚本形式后错误信息会更明了一些吗?
如果是的话我倒是可以考虑用脚本来调试,没错了再转回长命令 ...
写成脚本不保证错误信息更加详细,但是最起码可以将代码缩进,有利于阅读和维护!