当前位置:IT教程网教程中心程序开发Shell → 教程内容

急!在awk中如何引用shell的变量

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2006-12-27 13:50:00

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 使用变量,"'"变量"'" 这样试试。
双引号引单引号。

广告位置