2013-04-10 63 views
1

虽然我可以在log中看到count和pattern值,但我无法获得macthed值。请帮助我,我的要求是获取变量中的设备列表,但我认为它没有提取count和pattern值。awk使用变量

pattern=ABCD 
count=4 
x=3 
if [[ $count -gt $x ]] ; then 
echo "Count : $count" >> ${LOGFILE} 
echo "Pattern : $pattern" >> ${LOGFILE} 
list=cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}' 
echo "List : $list" >> ${LOGFILE}` 

我曾尝试以下方法,但没有工作

cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}' >> ${LOGFILE} 

当我直接在命令行中运行它的正常工作......

cat /tmp/info.txt | awk 'a-->0;/ABCD/{a=4}' 

回答

3

“模式”是一个shell变量。 awk不是shell,它是awk,所以你不应该期望在awk脚本中访问shell变量,就像你不希望在C程序中访问它们一样。在comp.unix.shell FAQ

见问题24:

http://cfajohnson.com/shell/cus-faq-2.html#Q24

,并使用 “-v” 选项。

然后解决您的外壳问题也和得到这样的结果:

pattern=ABCD 
count=4 
x=3 
if [[ $count -gt $x ]] ; then 
echo "Count : $count" >> "$LOGFILE" 
echo "Pattern : $pattern" >> "$LOGFILE" 
list=$(awk -v pattern="$pattern" -v count="$count" 'a-->0; $0 ~ pattern{a=count}' /tmp/info.txt) 
echo "List : $list" >> "$LOGFILE" 

这没有多大意义,但应该是语法正确的,至少,一旦你在适当的地方加上fi。如果你告诉我们你想做什么,我们可以帮你写一个明智的脚本来做到这一点。