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進行任何擴展。