【问题标题】:awk use a command line variableawk 使用命令行变量
【发布时间】:2011-10-16 05:51:45
【问题描述】:
awk -F, -f awkfile.awk -v mysearch="search term"
我正在尝试从终端使用上述命令,并在 awk 程序中使用 search 作为搜索词。我的awk 程序运行得非常好,实际上在程序内部分配了搜索词,但我想知道如何使用变量搜索?
它用于if($j ~ /mysearch/){ 的行示例,这不适用于设置搜索词,但实际上是搜索字符串mysearch。
【问题讨论】:
标签:
variables
command-line
awk
【解决方案2】:
这并不理想,但我建议编写一个 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】:
$ cat input
tinky-winky
dipsy
laa-laa
noo-noo
po
$ teletubby='po'
$ awk -v "regexp=$teletubby" '$0 ~ regexp' input
po
注意 anything 可以进入 shell 变量,
甚至是成熟的正则表达式,例如^d.*y。只要确保使用单引号
以防止外壳进行任何扩展。