awk -F, -f awkfile.awk -v mysearch="search term"
我正在尝试使用终端上面的命令,并使用搜索作为awk
程序中的搜索词。我的awk
程序运行完全正常,同时实际在程序中分配搜索词,但我想知道如何使用变量搜索?
if($j ~ /mysearch/){
使用的行示例,这不适用于设置搜索字词,但实际上是搜索字符串mysearch
。
答案 0 :(得分:3)
只需删除斜杠:
$j ~ mysearch
答案 1 :(得分:0)
这不太理想,但我建议编写一个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。
答案 2 :(得分:0)
$ cat input
tinky-winky
dipsy
laa-laa
noo-noo
po
$ teletubby='po'
$ awk -v "regexp=$teletubby" '$0 ~ regexp' input
po
请注意,任何都可以进入shell变量,
甚至是一个完整的正则表达式,例如^d.*y
。只需确保使用单引号
防止shell进行任何扩展。