当前位置:Linux教程 - Shell - shell - 在awk中如何引用shell的变量

shell - 在awk中如何引用shell的变量

在awk中如何引用shell的变量
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.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变量,不是定义局部变量