AWK使用函数变量

问题描述

我有一个(大概)简单的查询,例如:AWK。我正在构建一个使用函数定义的变量作为过滤器来选择我的行的函数

function myfc
 br=$1
 echo $br
 awk '{$2=="$br"}' infile > outfile
myfc ZZ

因此,我的myfc函数应从$ 2 = ZZ中选择所有行。但是没有。 echo $br确实返回ZZ,但是{$2=="$br"}似乎没有选择所需的行。我尝试了几种在{$2=="$br"}添加/删除引号的方法,但都无济于事。

我有什么提示吗?

解决方法

我不确定您使用的是什么shell,但是在基本的sh中:

function myfc { awk -v br=$1 '$2==br { print "Hi " $2 " and " $1 }'; }

检测字段2是何时作为myfc的参数给出的值;如下所示:

printf "t zz\ns yy\nu aa\n" | myfc zz

产生:

Hi zz and t

因此,要匹配您的用例:

myfc ZZ < infile > outfile

应该可以解决问题。