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
[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]]
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]
呵呵,多了个$
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的$