awk -F, -f awkfile.awk -v mysearch="search term"
AWK使用命令行变量
我试图从终端使用上述命令,并使用搜索作为awk
程序的搜索项。我的awk
程序运行得很好,而实际上在程序内部分配搜索词,但我想知道如何获得变量搜索?
它在if($j ~ /mysearch/){
上使用的行的示例,这在设置搜索项时无效,但实际上在搜索字符串mysearch
。
awk -F, -f awkfile.awk -v mysearch="search term"
AWK使用命令行变量
我试图从终端使用上述命令,并使用搜索作为awk
程序的搜索项。我的awk
程序运行得很好,而实际上在程序内部分配搜索词,但我想知道如何获得变量搜索?
它在if($j ~ /mysearch/){
上使用的行的示例,这在设置搜索项时无效,但实际上在搜索字符串mysearch
。
这并不理想,但我建议编写一个bash脚本,它会在搜索词中取代awk脚本中的搜索词,然后运行脚本。例如:
$ cat dosearch.sh
sed "s/XXX/$1/" awktemplate.awk > awkfile.awk
awk -f awkfile.awk data.txt
$ cat awktemplate.awk
{
j = 1
if ($j ~ /XXX/) {
# Do something, such as
print "Found:", $0
}
}
$ cat data.txt
foo here
bar there
xyz everywhere
$ ./dosearch.sh foo
Found: foo here
$ ./dosearch.sh bar
Found: bar there
在上面的例子中,AWK模板包含“XXX”作为搜索项,则bash脚本替换与第一参数检索词,然后调用所修改的脚本AWK。
只需删除斜杠:
$j ~ mysearch
$ cat input
tinky-winky
dipsy
laa-laa
noo-noo
po
$ teletubby='po'
$ awk -v "regexp=$teletubby" '$0 ~ regexp' input
po
注意什么可以进入壳变量, 甚至一个全面的正则表达式,e.g ^d.*y
。只要确保使用单引号 来防止shell进行任何扩展。