2011-10-15 139 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進行任何擴展。