awk使用命令行变量

时间:2011-10-15 02:06:50

标签: variables command-line awk

awk -F, -f awkfile.awk -v mysearch="search term"

我正在尝试使用终端上面的命令,并使用搜索作为awk程序中的搜索词。我的awk程序运行完全正常,同时实际在程序中分配搜索词,但我想知道如何使用变量搜索?

if($j ~ /mysearch/){使用的行示例,这不适用于设置搜索字词,但实际上是搜索字符串mysearch

3 个答案:

答案 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进行任何扩展。