Search code examples
regexbashawkgrepopenwrt

How to find two values in file and use theese as variables?


How can I find and store as variables the two numbers followed by "RX bytes:" and "TX bytes:" in this file? I want to calculate with theese values in a simple current bandwidth monitor bash script using an OpenWrt router.

/dev/band1:

br-lan    Link encap:Ethernet  HWaddr 
      inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:3848954 errors:0 dropped:21234 overruns:0 frame:0
      TX packets:4213574 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:1206316927 (1.1 GiB)  TX bytes:3385060741 (3.1 GiB)

Thank you for your help!


Solution

  • for example, the RX bytes, you could:

    rxBytes=$(yourcmd|grep -Po '(?<=RX bytes:)\d+')
    

    replace the RX with TX you get another variable

    EDIT

    you could also go with awk:

    rxBytes=$(awk -F'RX bytes:' 'NF>1{sub(/ .*$/,"",$2);print $2}')
    

    chg the RX -> TX to get the other one.