awk使用变量

时间:2013-04-10 14:04:09

标签: shell awk

虽然我可以在log中看到计数和模式值,但我无法获得macthed值。请帮助我,我的要求是获取变量中的设备列表,但我认为它没有获取计数和模式值。

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}'

1 个答案:

答案 0 :(得分:3)

“pattern”是一个shell变量。 awk不是shell,它是awk,因此你不应该期望在awk脚本中访问shell变量,就像你不希望在C程序中访问它们一样。

请参阅comp.unix.shell FAQ中的问题24:

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

并使用“-v”选项。

然后修复你的shell问题并得到这个结果:

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后,语法应该是正确的。如果你告诉我们你想要做什么,我们可以帮助你写一个合理的脚本来做到这一点。