Linux
Bash:根據列 y 中的值計算列 x 中值的出現次數
我有一個這樣的字元串。
data = "state:: 4 caller_contact:: sip:123456789@192.168.10.01:5080;transport=udp state:: 4 caller_contact:: sip:123456789@192.168.10.11:5080;transport=udp state:: 4 caller_contact:: sip:123456789@192.168.10.03:5080;transport=udp state:: 4 caller_contact:: sip:123456789@192.168.10.26:5080;transport=udp state:: 2 caller_contact:: sip:123456789@192.168.10.26:5080;transport=udp state:: 2 caller_contact:: sip:123456789@192.168.10.11:5080;transport=udp state:: 1 caller_contact:: sip:123456789@192.168.10.07:5080;transport=udp"
我需要編寫一個 bash 腳本來計算每個 IP 例如 192.168.26 有多少次狀態 4 或狀態 2。(這個字元串不包含’/n’)
我無法根據每個 IP 解析此字元串併計算值。
我不確定這是否適用於您可能擁有的每種可能的組合,但它適用於您提供的小樣本:
sed "1,\$s/state/\nstate/g" file | grep state > NewFile for IPADDR in $(cat NewFile | cut -d"@" -f2|cut -d":" -f1|sort -n|uniq);do for STATE in 2 4 ;do LineCount=$(grep "${IPADDR}" NewFile |grep "state:: ${STATE}"| wc -l) echo "For IP address ${IPADDR}, status:: ${STATE} lines count is ${LineCount}" done done | grep -v "is 0"$
您可以在裡面的 for 循環中添加任意數量的不同狀態數字
基本上,您在每次出現字元串之前插入一個換行符,
state
從而生成大數據塊,分成多行。