| 您的位置:首页 > 文档 > Shell > |
文章分类热门文章 |
在awk中如何引用shell的变量创建:2005-10-26 00:49:43 作者:Unlinux 来自: http://www.Unlinux.com NoFlow1=0 NoFlow0=1 while [$NoFlow1 -le 18] do export NoFlow1 while [$NoFlow0 -le 35] do export NoFlow0 ns txy.tcl gawk -f txy.awk TRACE >> RESULT NoFlow0='expr $NoFlow0+1' done NoFlow0=1 NoFlow1='expr $NoFlow1+1' done txy.tcl中要引用NoFlow0,NoFlow1两个变量,它运行产生的结果为TRACE.现在我要在txy.awk中 进行一个判断,当条件成立时,我需要记录此时上面两个变量NoFlow0,NoFlow1的值,(这两个值在TRACE中没有); 并且要跳出循环,请问谁能帮我? 或者,把判断移到shell script上来,gawk -f txy.awk TRACE > RESULT,对RESULT里面的数据 进行判断,当条件成立时,记录此时NoFlow0,NoFlow1的值, 把他们放到一个新文件内,并且跳出循环,请问如何做? 谢谢各位! awk里面是支持系统环境变量的,但是不知道怎样使用用户自定义的局部变量。 只是见过有这样的用法: ENVIRON["EDITOR"]="Vi" 参考一下,尝试一下。 [这个贴子最后由valentine在 2002/03/30 06:28pm 编辑] "'$varible'" or ENVIRON["varible"] Hi, 我已经把问题解决了,非常感谢各位的帮助!!! awk里面好像不能使用用户自定义的局部变量,比较头大! 没有听懂提问者locust的意思,不过见到大家在讨论awk中引用用户自定义变量的问题,不禁要来说两句。有点儿像我在如何设置动态变量帖(http://www.chinaunix.net/cgi-bin/bbs/topic.cgi?forum=11&topic=134&show=0)中讨论的问题一样,这个问题同样也是可以解决的,准确理解shell的解释机制和引号的功能,就可以想到这一点。(注意使用中的双引号而不是单引号,关于双引号和单引号的区别与利用,我会找时间专门整理成文。)请看: #!/bin/sh text='Thisisatext' mytext='abcd' echo $text|awk "{print "$mytext"}" 输出结果就是...... “abcd” michaleds说的不错。 在“”里$,`,是视为特殊字符。 而在‘’里它们是普通字符。 这样,我们通常可以用三种形式在awk中使用环境变量了。 比较干脆的解决方法是使用awk的兄弟nawk,用法如下: A=44 echo "ABCD" | nawk -v GET_A=$A '{print GET_A}' .... 注意nawk -v ,其作用就是类似为常数赋值的作用,每赋值一个常数加一个“-v”,如: echo "ABCD" | nawk -v GET_A=$A -v GET_B=$B '{print GET_A GET_B}' 我之前提供的nawk文档对此项功能有说明,请细看。 但是最易用的方法我认为还是valentine说的awk '{print "'$str'"}' 看了楼上兄弟们的文字,收获真多啊! 我说一下我常用的方法: A=something echo "ABCD" | awk '{print a}' a=$A 不过这样定义的变量a跟用-va=$A定义的不同之处在于, 在BEGIN中是不能用的:( 在unix环境西的c程序可以使用awk命令吗 看了楼上兄弟们的文字,收获真多啊! 我说一下我常用的方法: printf " 请输入局所号:" read jsh yyy=`awk '$2==jsh {print $1;}' jsh="$jsh" zjk` 在zjk文件中查找$2=变量jsh的记录,然后把$1的值赋于变量yyy 为什么不在BEGIN中定义呢? awk 'BEGIN {定义局部变量 } { } ' filename 题目是要引用shell变量,不是定义局部变量 转载自:http://www.unlinux.com/doc/shell/20051026/151.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接 无相关信息 |