LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1422|回复: 4

如何用变量代替awk的输出文件名

[复制链接]
发表于 2011-5-13 10:27:54 | 显示全部楼层 |阅读模式
RT
例如:
awk '{print >> "output.file"}'

其中文件名output.file中间能不能包含一个awk的变量或者shell变量,从而让不同的输入文件输入到不同的输出文件里呢?

麻烦大家了~

oben
 楼主| 发表于 2011-5-13 11:18:54 | 显示全部楼层

额,自己解决了……

原来awk在双引号里引用变量需要加$号,而且需要单引号括起来……

awk '{print > "'$variable'"}'就可以了..
回复 支持 反对

使用道具 举报

发表于 2011-5-17 19:26:26 | 显示全部楼层
Post by obennoname;2138976
原来awk在双引号里引用变量需要加$号,而且需要单引号括起来……

awk '{print > "'$variable'"}'就可以了..

做法是可行的但解释是错的。awk的运行字符串其实是由bash先解释过了。如下所示,由单引号括起来的部分bash不做什么解释,蓝色部分其实是在单引号外面,由bash先做了变量替换再传给awk。这个过程其实跟awk没有关系,在其它程序比如sed, grep等都适用。为了防止变量带空格,最好用双引号把变量括起来。
[color="Red"]'{print > "'[color="Blue"]$variable[color="Red"]'"}'
回复 支持 反对

使用道具 举报

发表于 2011-5-31 16:10:34 | 显示全部楼层
Post by obennoname;2138976
原来awk在双引号里引用变量需要加$号,而且需要单引号括起来……

awk '{print > "'$variable'"}'就可以了..



1。用法是可行的,但是你的理解不妥。
2。因为单引号,双引号是不分左右的,所以'或"总是去找离它最近的一个来和它自己配对。
3。所以'{print > "'$variable'"}'实际上被解释成三部分的 '{print > ' 和"$variable"和'}'
4。linux与unix shell编程指南一书中有提到最外层用一个双引号就可以解决了"{print > $variable}"
回复 支持 反对

使用道具 举报

发表于 2011-5-31 17:36:34 | 显示全部楼层
思路是先让shell把$variable解释出来再传给awk,这么想就很简单了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表