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