Linux

Bash:根據列 y 中的值計算列 x 中值的出現次數

  • November 21, 2018

我有一個這樣的字元串。

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從而生成大數據塊,分成多行。

引用自:https://unix.stackexchange.com/questions/303076