尾-Fn0和变量

时间:2014-11-05 10:19:50

标签: bash

这是从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。

1 个答案:

答案 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) }')