我想用bash变量替换awk命令中的变量。如何传递一个bash变量作为awk参数的值?
例如:
var="one two three"
echo $var | awk "{print $2}"
我想用var
变量替换$2
。我试过awk -v
以及awk "{ print ${$wordnum} }
之类的东西都无济于事。
我想用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
解释由shell。第二行的软引号允许变量替换。
这很合理!我需要通过2美元,而不是2美元的价值。谢谢。 – senorsmile 2013-02-14 20:17:33
除了我需要从shell传递变量。例如silo.sh东西5,所以1美元=东西和2美元= 5,因此传递5美元从awk命令打印第5项。 – senorsmile 2013-02-14 20:21:36
不要这样做,因为当你的shell变量包含一些字符时,会导致奇怪的错误。请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24将shell变量的值传递给awk脚本的正确方法。这个答案的外壳部分也有其他问题。 – 2013-02-14 22:02:52
,可以串联使用变量的awk语句的部分。也许这是你在你的脚本文件想要什么:
echo $1|awk '{print($'$2');}'
这里的部分{print($
和局部变量$ 2和);}
被连接起来,并给AWK值。
编辑:经过一些建议,而不是使用这个。也许是一次性解决方案。最好习惯于马上做正确的事情 - 请参阅第一条评论中的链接。
不要这样做,因为当你的shell变量包含一些字符时,会导致奇怪的错误。请参阅cfajohnson.com/shell/cus-faq-2.html#Q24将shell变量的值传递给awk脚本的正确方法。这个答案的外壳部分也有其他问题。 – 2013-02-14 22:03:36
@EdMorton:你能举出两个问题的例子吗?如果我控制输入,是否还有一个不使用串联语句的理由? – valid 2013-02-14 22:23:36
尝试使用$ 1和/或$ 2等于*或$ 2未填充或设置为非数字值或....不使用连接语句的最佳原因可能是没有理由使用连接语句,并且如果您总是以正确的方式去做,那么当你不像你想象的那样控制输入时,你不会错误地错误地使用它。同上引用你的shell变量。 – 2013-02-15 02:14:25
做到了。谢谢。 – senorsmile 2013-02-14 20:29:27
很高兴我可以帮助:) – 2013-02-14 20:31:13
+1为正确的方法,但双引号你的shell变量。 – 2013-02-14 22:04:14