출력 스크립트의 데이터 차이

출력 스크립트의 데이터 차이

특정 인터페이스에서 수신 및 전송된 데이터에 대한 정보를 출력하는 데 도움이 되는 스크립트를 만들려고 합니다. 시작하는 방법은 다음과 같습니다.

#!/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

필요한 작업을 수행하는 추악한 스크립트가 있습니다. 아이디어는 다음과 같습니다.

  • 인터페이스 통계를 파일에 저장
  • 파일을 한 줄씩 읽기
  • 줄에 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 )

관련 정보