如何将bash变量作为awk参数的值传递



我想用bash变量替换awk命令中的一个变量。

例如:

var="one two three"    
echo $var | awk "{print $2}"

我想用var变量替换$2。我试过awk -v和类似awk "{ print ${$wordnum} }的东西,但都没有用。

截然不同的方法:

$ echo $var
one two three
$ field=3
$ echo $var | awk -v f="$field" '{print $f}'
three
$ field=2
$ echo $var | awk -v f="$field" '{print $f}'
two

你几乎得到了…

$ myfield='$3'
$ echo $var | awk "{print $myfield}"
three

第一行的硬引号阻止外壳对$3进行解释。第二行的软引号允许变量替换。

您可以将awk语句的部分与变量连接起来。也许这就是你想要的脚本文件:

echo $1|awk '{print($'$2');}'

这里,部分{print($以及局部变量$2和);}的值被连接并被赋予awk。

编辑:经过一些建议,还是不要用这个。也许是一次性解决方案。最好马上就习惯这样做——请参阅第一条评论中的链接。

最新更新