求助:awk脚本,条件语句不起作用了?

发布于 2022-10-15 09:19:58 字数 1126 浏览 19 评论 0

本帖最后由 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

许久 2022-10-22 09:19:58

本帖最后由 小小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} 删了。。

  1. #!/bin/awk -f
  2. BEGIN{a=0;b=0;c=0;d=0}
  3. {
  4. for(i=1;i<=NF;i++){
  5. if($i=="celldm(1)="){a=$(i+1)}
  6. if($i=="celldm(2)="){b=$(i+1)}
  7. if($i=="celldm(3)="){c=$(i+1)}
  8. if($i=="celldm(4)="){d=$(i+1)}
  9. }
  10. }
  11. END{
  12. print "a="a;
  13. print "b="b;
  14. print "c="c;
  15. print "d="d;
  16. }

复制代码执行结果:

a=10.38828296
b=0
c=4.44037202
d=0

和我恋爱吧 2022-10-22 09:19:58

本帖最后由 jason680 于 2011-04-18 09:48 编辑

待处理的文本 cat tmpfile:

system
    ibrav= 12 celldm(1)= 10.38828296   
    celldm(3)= 4.4403 ...
huazhorg 发表于 2011-04-18 08:36

别在用a,b,c,d了,阵列也很好用...

  1. $ echo 'system
  2.     ibrav= 12 celldm(1)= 10.38828296   
  3.     celldm(3)= 4.44037202
  4.     nat= 22, ntyp=4
  5. '| awk 'BEGIN{for(i=0;i<4;i++)celldm[i]=0}
  6. {if(match($0,/celldm\(([0-9])\)= ([-0-9.]+)/,v))celldm[v[1]]=v[2]}
  7. END{for(i=0;i<4;i++)printf("celldm[%d]=%s\n",i,celldm[i])}'
  8. celldm[0]=0
  9. celldm[1]=10.38828296
  10. celldm[2]=0
  11. celldm[3]=4.44037202

复制代码

左耳近心 2022-10-22 09:19:58

本帖最后由 huazhorg 于 2011-04-18 09:51 编辑

别在用a,b,c,d了,阵列也很好用...
jason680 发表于 2011-04-18 09:32

    谢谢。当然你这个方法也不错。实际上这个脚本只是一部分,根据需要,用abcd是已经前面已经定义好的变量,这里只是测试一下,如果不用数组,而采用变量的方式呢?将abcd 遇到满足条件的,就赋值,否则就赋0,怎么改呢?

挽容 2022-10-22 09:19:58

谢谢。实际上这个脚本只是一部分,用abcd是已经前面已经定义好的变量,这里只是测试一下,如果不 ...
huazhorg 发表于 2011-04-18 09:49

请看二楼...

再见回来 2022-10-22 09:19:58

本帖最后由 huazhorg 于 2011-04-18 10:12 编辑

if($i=="celldm(1)="{a=$(i+1)}
     else{a=0}  

关键还是错在了 else {a=0}

比如在 下面这一行
...
小小linux 发表于 2011-04-18 09:27

    你改进了你的办法,使得结果简洁明了,借鉴了!这个问题困扰我几天,原来只需要在开始的部分定义好就行了,好办法,谢谢了!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文