2011-10-15 102 views
1

awk -F, -f awkfile.awk -v mysearch="search term"AWK使用命令行变量

我试图从终端使用上述命令,并使用搜索作为awk程序的搜索项。我的awk程序运行得很好,而实际上在程序内部分配搜索词,但我想知道如何获得变量搜索?

它在if($j ~ /mysearch/){上使用的行的示例,这在设置搜索项时无效,但实际上在搜索字符串mysearch

回答

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。

3

只需删除斜杠:

$j ~ mysearch 
0
$ 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进行任何扩展。