首页 > Ubuntu 命令 > awk中使用的shell命令

awk中使用的shell命令

2011年4月12日 发表评论 阅读评论

awk中使用的shell命令,有2种方法:

一、使用所以system()

awk程序中我们可以使用system() 函数去调用shell命令
如:awk ‘BEGIN{system(“echo abc”)}’ file
echo abc 就会做为”命令行”,由shell来执行,所以我们会得到以下结果:

$ awk ‘BEGIN{system(“echo abc”)}’
abc

$ awk ‘BEGIN{v1=”echo”;v2=”abc”;system(v1″ “v2)}’
abc

$ awk ‘BEGIN{v1=”echo”;v2=”abc”;system(v1 v2)}’
/bin/sh: echoabc: command not found

$ awk ‘BEGIN{v1=echo;v2=abc;system(v1″ “v2)}’

从上面的例子,我们简单的分析一下awk是怎样调用system的:
如果system()括号里面的参数没有加上双引号的话,awk认为它是一个变量,它会从awk的变量里面把它们先置换为常量,然后再回传给shell

如果system()括号里面的参数有加上双引号的话,那么awk就直接把引号里面的内容回传给shell,作为shell的”命令行”

二、使用print cmd | “/bin/bash”
$ awk ‘BEGIN{print “echo”,”abc”| “/bin/bash”}’
abc

$ awk ‘BEGIN{print “echo”,”abc”,”;”,”echo”,”123″| “/bin/bash”}’
abc
123

三、总结
无论使用system()还是print cmd | “/bin/bash”
awk都是新开一个shell,在相应的cmdline参数送回给shell,所以要注意当前shell变量与新开shell变量问题

1.1
$ abc=12345567890
$ awk ‘BEGIN{system(“echo $abc”)}’

1.2
$ export abc=12345567890
$ awk ‘BEGIN{system(“echo $abc”)}’
12345567890

2.1
$ abc=1234567890
$ awk ‘BEGIN{print “echo”,”$abc”| “/bin/bash”}’

2.2
$ export abc=1234567890
$ awk ‘BEGIN{print “echo”,”$abc”| “/bin/bash”}’
1234567890

以上例子,没有export的话,那些变量都是只存在于当前shell变量中,所以都是echo不出来的 ,
而使用了 export的都是环境变量,所以awk调用新的shell时候,可以echo出来

分类: Ubuntu 命令 标签: ,
  1. 本文目前尚无任何评论.