- ·上一篇教程:[原创]论正则表达式的“贪婪”性
- ·下一篇教程:如何用date获得前一天的日期,忘了
急!在awk中如何引用shell的变量
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的值, 把他们放到一个新文件内,并且跳出循环,请问如何做?
谢谢各位!
| feeling 回复于:2002-03-30 09:40:48 |
| awk里面是支持系统环境变量的,但是不知道怎样使用用户自定义的局部变量。 只是见过有这样的用法: ENVIRON["EDITOR"]="Vi" 参考一下,尝试一下。 |
| valentine 回复于:2002-03-30 17:58:11 |
| [这个贴子最后由valentine在 2002/03/30 06:28pm 编辑] "'$varible'" or ENVIRON["varible"] |
| locust 回复于:2002-03-31 10:50:58 |
| Hi, 我已经把问题解决了,非常感谢各位的帮助!!! |
| jerryesquire 回复于:2002-04-01 08:59:04 |
| awk里面好像不能使用用户自定义的局部变量,比较头大! |
| michaelds 回复于:2002-04-01 10:59:02 |
| 没有听懂提问者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” |
| valentine 回复于:2002-04-01 14:04:49 |
| michaleds说的不错。 在“”里$,`,\是视为特殊字符。 而在‘’里它们是普通字符。 这样,我们通常可以用三种形式在awk中使用环境变量了。 |
| sopato 回复于:2002-04-02 09:16:49 |
| 比较干脆的解决方法是使用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文档对此项功能有说明,请细看。 |
| michaelds 回复于:2002-04-02 10:06:44 |
| 但是最易用的方法我认为还是valentine说的awk '{print "'$str'"}' |
| sopato 回复于:2002-04-02 10:12:38 |
| 咸鱼白菜,各人所好。呵呵。 |
| locust 回复于:2002-04-03 01:38:53 |
| 再次感谢各位!!这里真是个学习的好地方.. |
| taige 回复于:2002-06-06 11:50:26 |
| 看了楼上兄弟们的文字,收获真多啊! 我说一下我常用的方法: A=something echo "ABCD" | awk '{print a}' a=$A 不过这样定义的变量a跟用-va=$A定义的不同之处在于, 在BEGIN中是不能用的:( |
| xby 回复于:2002-06-19 17:02:31 |
| 在unix环境西的c程序可以使用awk命令吗 |
| taige 回复于:2002-06-19 20:26:21 |
| “在unix环境西的c程序可以使用awk命令” 是什么意思? system()调用吧 |
| fly99sky 回复于:2002-07-07 08:40:54 |
| 看了楼上兄弟们的文字,收获真多啊! 我说一下我常用的方法: printf " 请输入局所号:" read jsh yyy=`awk '$2==jsh {print $1;}' jsh="$jsh" zjk` 在zjk文件中查找$2=变量jsh的记录,然后把$1的值赋于变量yyy |
| yjlucky 回复于:2002-07-16 13:14:04 |
| 为什么不在BEGIN中定义呢? awk 'BEGIN {定义局部变量 } { } ' filename |
| taige 回复于:2002-07-16 16:10:17 |
| 题目是要引用shell变量,不是定义局部变量 |
| 明月峡 回复于:2004-05-11 23:19:42 |
| 在awk 使用变量,"'"变量"'" 这样试试。 双引号引单引号。 |





