出力スクリプトのデータの違い

出力スクリプトのデータの違い

特定のインターフェイスで受信および送信されたデータに関する情報を出力するのに役立つスクリプトを作成しようとしています。始める方法は次のとおりです。

#!/bin/bash

interface=$1

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

sleep 10
done

しかし、私はまた、データ変更の違いを取得したいと思います。どのように出力するのか分かりません。つまり、私のスクリプト行から次のようになります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

必要なタスクを実行する醜いスクリプトがあります。アイデアは次のとおりです。

  • インターフェース統計をファイルに保存
  • ファイルを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 )

おすすめ記事