1

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

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

1 回答 1

3

“模式”是一个外壳变量。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这没有多大意义,但至少在适当的位置添加后应该在语法上是正确的。如果您告诉我们您想要做什么,我们可以帮助您编写一个合理的脚本来完成它。

于 2013-04-10T14:08:09.230 回答