簡體   English   中英

從尾部匹配awk時的增量變量

[英]Increment variable when matched awk from tail

我正在從主動寫入文件進行監視:

我當前的解決方案是:

ws_trans=0
sc_trans=0
tail -F /var/log/file.log | \
while read LINE
echo $LINE | grep -q -e "enterpriseID:"
if [ $? = 0 ]
then
((ws_trans++))
fi
echo $LINE | grep -q -e "sc_ID:"
if [ $? = 0 ]
then
((sc_trans++))
fi

printf "\r WSTRANS: $ws_trans \t\t SCTRANS: $sc_trans"

done

但是,當嘗試使用AWK執行此操作時,我沒有得到輸出- $ws_trans$sc_trans仍然為0

ws_trans=0
sc_trans=0

tail -F /var/log/file.log | \
while read LINE
echo $LINE | awk '/enterpriseID:/ {++ws_trans} END {print | ws_trans}'
echo $LINE | awk '/sc_ID:/ {++sc_trans} END {print | sc_trans}'

printf "\r WSTRANS: $ws_trans \t\t SCTRANS: $sc_trans"

done

嘗試這樣做以減少負載。 我知道AWK不會處理bash變量,並且會引起混亂,但是我發現的唯一參考是AWK的非尾部應用程序。

如何將AWK變量分配給bash ws_transsc_trans 有更好的解決方案嗎? (正在監視其他搜索詞。)

您需要使用-v選項傳遞變量,例如:

$ var=0
$ printf %d\\n {1..10} | awk -v awk_var=${var} '{++awk_var} {print awk_var}'

要設置變量“ back”,可以使用define ,例如:

$ declare $(printf %d\\n {1..10} | awk -v awk_var=${var} '{++awk_var} END {print "var=" awk_var}')
$ echo $var
$ 10

您的腳本可以這樣重寫:

ws_trans=0
sc_trans=0

tail -F /var/log/system.log |
while read LINE
do
    declare $(echo $LINE | awk -v ws=${ws_trans} '/enterpriseID:/ {++ws} END {print "ws_trans="ws}')
    declare $(echo $LINE | awk -v sc=${sc_trans} '/sc_ID:/ {++sc} END {print "sc_trans="sc}')
    printf "\r WSTRANS: $ws_trans \t\t SCTRANS: $sc_trans"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM