输出脚本中数据的差异

输出脚本中数据的差异

我尝试制作脚本来帮助我输出有关特定接口上接收和传输数据的信息。这是它的开始内容:

#!/bin/bash

interface=$1

while true; do
ip -s link ls $interface | awk '{ print $1 "\t" $2}'

sleep 10
done

但我也想得到数据变化的差异。我完全不知道如何输出它。所以对于 ie 我从我的脚本行得到这个ip -s link ls $interface | awk '{ print $1 "\t" $2}'

2:      enp0s3:
link/ether      08:00:27:ad:a6:53
RX:     bytes
38134   399
TX:     bytes
34722   247

例如,我想获得38134和之间的差异,34722然后将399和之间的差异添加到某个文件中。247

答案1

我有一个丑陋的脚本可以满足您的需求。这个想法是:

  • 将接口统计信息存储在文件中
  • 逐行读取文件
  • 如果该行包含 RX(或 TX),则意味着下一行包含您要解析的信息。

剧本:

#!/bin/bash

ip -s link ls $interface > ip_stats

RX=0
TX=0
# read file
while read LINE
do 
    # read RX info form line
    if [ $RX -eq 1 ]
    then
        RX_packets=$(echo $LINE | awk '{print $1}')
        RX_bytes=$(echo $LINE | awk '{print $2}')        
    fi
    # see if next line will contain RX stats
    if echo $LINE | grep RX 
    then
        RX=1
    else
        RX=0
    fi

    # read TX info form line
    if [ $TX -eq 1 ]
    then
        TX_packets=$(echo $LINE | awk '{print $1}')
        TX_bytes=$(echo $LINE | awk '{print $2}')        
    fi
    # see if next line will contain TX stats
    if echo $LINE | grep TX 
    then
        TX=1
    else
        TX=0
    fi

done < ip_stats

echo RX_packets is $RX_packets
echo TX_packets is $TX_packets

echo RX_bytes is $RX_bytes
echo TX_bytes is $TX_bytes

# make diff
echo packets diff: $(expr $RX_packets - $TX_packets )
echo bytes diff: $(expr $RX_bytes - $TX_bytes )

相关内容