这是从Faulty tail syntax or grep command?开始的,但是我正在阅读给定条件的实时日志条目,以及何时它们会继续执行其余的脚本。我用这个:
tail -Fn0 /var/log/messages | grep -q "CPU utilization" | grep -q "exceeded threshold"
FPC=$(echo $line | awk 'END { print substr($8,1,1) }')
PIC=$(echo $line | awk 'END { print substr($11,1,1) }')
echo FPC $FPC
echo PIC $PIC
echo "Running information gathering"...and rest of script.
这对于条件检测和进一步执行非常有效,但我没有日志条目来测试FPC和PIC变量。我试过把尾巴声明包裹起来:
line=$(tail -Fn0 /var/log/messages | grep -q "CPU utilization" | grep -q "exceeded threshold")
但是grep -q以静默方式退出,$ line变量为空。我试过了:
line=$(tail -Fn0 /var/log/messages | grep -m1 "CPU utilization" | grep -m1 "exceeded threshold")
在我尝试从脚本中删除CONTROL-C之前不起作用。然后它工作正常并继续完美。有人可以帮忙吗?
我稍后需要在脚本中使用变量FPC和PIC。
答案 0 :(得分:1)
假设您以后不需要这些变量,您可以这样做:
tail -Fn0 /var/log/messages | \
awk '/CPU utilization/ && /exceeded threshold/ {
print "FPC", substr($8,1,1); print "PIC", substr($11,1,1); exit }'
当线条与两种图案匹配时,打印您感兴趣的两部分并退出。
如果你确实需要这些变量,你可以这样做:
line=$(tail -Fn0 /var/log/messages | awk '/CPU utilization/&&/exceeded threshold/{print;exit}')
FPC=$(echo "$line" | awk '{ print substr($8,1,1) }')
PIC=$(echo "$line" | awk '{ print substr($11,1,1) }')