如何在awk命令里引用变量

lil33
如何在awk命令里引用变量

myfile
[code]
1   dsklk    dsfjkjl39p
2   3iiorweo  erewoi
3   e2ejjksd 09mm
[/code]
在shell脚本里有这样一行
[code]
a=2;awk '{if($1>$a)print$0}' myfile
[/code]
输出的结果应该是
[code]
3   e2ejjksd 09mm
[/code]
但实际上,这条命令不能执行,因为在单引号里$a这个变量无法识别出,有没有其他的办法?

hh9net
awk -v a=2 '{if($1>a)print$0}' myfile

lil33
[quote]原帖由 [i]hh9net[/i] 于 2008-7-1 16:12 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8712104&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
awk -v a=2 '{if($1>a)print$0}' myfile [/quote]


多谢多谢...
没想到这么简单,,一定要仔细看看资料了。。。

hh9net
呵呵,楼主的比我注册的早多了

liaosnet
awk '{if($1>$a)print$0}' a=2 myfile

zhaopingzi
[code]
a=2;awk '{if($1>'$a')print$0}' myfile
[/code]

这样就可以了

hh9net
[quote]原帖由 [i]liaosnet[/i] 于 2008-7-1 16:19 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8712183&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
awk '{if($1>$a)print$0}' a=2 myfile [/quote]


好象不对啊

[root@localhost ~]# awk '{if(0>$a)print$0}' a=2 hehe
123
456
345

居然有东西输出

liaosnet
[quote]原帖由 [i]hh9net[/i] 于 2008-7-1 16:22 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8712231&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]



好象不对啊

[root@localhost ~]# awk '{if(0>$a)print$0}' a=2 hehe
123
456
345

居然有东西输出 [/quote]


$ more 11.txt
number:1236
date:20080613
$ awk '{print $0"|"a}' a=TEST 11.txt
number:1236|TEST
date:20080613|TEST
$ awk -F":" '{if($2>a){print $0}}' a=3000 11.txt
date:20080613

[[i] 本帖最后由 liaosnet 于 2008-7-1 16:29 编辑 [/i]]

liaosnet
回复 #7 hh9net 的帖子

自己检查有没有输入错误~~:em17: :em17:

hh9net
[quote]原帖由 [i]liaosnet[/i] 于 2008-7-1 16:19 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8712183&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
awk '{if($1>$a)print$0}' a=2 myfile [/quote]



呵呵,多了个$

rabinwang
运行后怎么报错啊!

-bash-3.00$ a=2
-bash-3.00$ awk -v a=2 '{if($1>a)print$0}' ufile
awk: syntax error near line 1
awk: bailing out near line 1

tp168
1、a=2;awk '{if($1>'$a')print$0}' myfile,这个$a在两个字符串中间,相当于凑awk执行的动作('{if ($1>'+$a+') print $0}'),当然可以了
2、awk -v a=2 '{if($1>a)print$0}' myfile,这个变量赋值是作为awk的参数,如果a是在脚本里另外命令行里赋值的呢,这个就不行了
3、awk '{if($1>$a)print$0}' a=2 myfile ,这个不对,应该是awk '{if($1>a) print $0} a=2 myfile,和第2个命令一样的

[[i] 本帖最后由 tp168 于 2008-7-1 18:50 编辑 [/i]]

寂寞烈火
[quote]原帖由 [i]hh9net[/i] 于 2008-7-1 16:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8712163&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
呵呵,楼主的比我注册的早多了 [/quote]
楼主比我注册还早半年呢~

无声无息
[quote]原帖由 [i]tp168[/i] 于 2008-7-1 18:39 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8713502&ptid=1185771][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
1、a=2;awk '{if($1>'$a')print$0}' myfile,这个$a在两个字符串中间,相当于凑awk执行的动作('{if ($1>'+$a+') print $0}'),当然可以了
[/quote]
就是让人知道知道是bash的$

gawk
不要当perl,shell用

[[i] 本帖最后由 gawk 于 2008-7-1 21:16 编辑 [/i]]

jinl
老问题了,为什么不先看看旧贴子,翻翻精华