求助:awk脚本,条件语句不起作用了?
本帖最后由 huazhorg 于 2011-04-18 08:38 编辑
待处理的文本 cat tmpfile:
system
ibrav= 12 celldm(1)= 10.38828296
celldm(3)= 4.44037202
nat= 22, ntyp=4
awk脚本 cat test.awk:
#!/bin/awk -f
BEGIN{}
{
for(i=1;i<=NF;i++){
if($i=="celldm(1)="){a=$(i+1)}
else{a=0}
if($i=="celldm(2)="){b=$(i+1)}
else{b=0}
if($i=="celldm(3)="){c=$(i+1)}
else{c=0}
if($i=="celldm(4)="){d=$(i+1)}
else{d=0}
}
}
END{
print "a="a;
print "b="b;
print "c="c;
print "d="d;
}
运行./test.awk tmpfile后,结果为
a=0
b=0
c=0
d=0
貌似条件语句没起作用?我希望结果是:
a=10.38828296
b=0
c=4.44037202
d=0
请问各位前辈,脚本该怎么改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
本帖最后由 小小linux 于 2011-04-18 09:43 编辑
if($i=="celldm(1)="){a=$(i+1)}
else{a=0}
关键还是错在了 else {a=0}
比如在 下面这一行
ibrav= 12 celldm(1)= 10.38828296 此行有四个域
本来 在i=3 时匹配 执行 a=$(i+1)
但是 i=4 时 不匹配 执行 else{a=0}
然后 结束 。。所以 a=0
你把 else {a=0} 删了。。
复制代码执行结果:
a=10.38828296
b=0
c=4.44037202
d=0
本帖最后由 jason680 于 2011-04-18 09:48 编辑
别在用a,b,c,d了,阵列也很好用...
复制代码
本帖最后由 huazhorg 于 2011-04-18 09:51 编辑
谢谢。当然你这个方法也不错。实际上这个脚本只是一部分,根据需要,用abcd是已经前面已经定义好的变量,这里只是测试一下,如果不用数组,而采用变量的方式呢?将abcd 遇到满足条件的,就赋值,否则就赋0,怎么改呢?
请看二楼...
本帖最后由 huazhorg 于 2011-04-18 10:12 编辑
你改进了你的办法,使得结果简洁明了,借鉴了!这个问题困扰我几天,原来只需要在开始的部分定义好就行了,好办法,谢谢了!