2014-11-05 24 views
0

這跟從Faulty tail syntax or grep command?開始,但是我正在閱讀給定條件的實時日誌條目,以及它們何時符合繼續執行腳本的其餘部分。我正在使用這個:Tail -Fn0和變量

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

假設你不需要以後這些變量,你可以做這樣的事情:

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) }') 
+0

+1是AWK是該比'再次grep' – anubhava 2014-11-05 10:54:44

+1

@湯姆非常感謝更好的選擇! – 2014-11-05 11:35:55