Hi guys,
As a beginner, I’m looking for a way about how to extract selected
values from captured output.
Suppose, I call external command in this way:
def shorewall
begin
cmd = ‘shorewall show ipa’
ipa, s = Open3.capture2(cmd)
if s.success?
return ipa
end
rescue StandardError => e
return “No good, #{e.message}.”
end
end
After that, shorewall contains:
Shorewall 4.5.17.1 per-IP Accounting at fw1 - Sun Jun 9 18:38:05 EST
2013
Showing table: cowboys
IP: 192.168.200.1 SRC packets: 4196607 bytes: 292644635 DST packets:
7224498 bytes: 762829278
IP: 192.168.200.2 SRC packets: 77289 bytes: 4799573 DST packets: 324472
bytes: 481821874
IP: 192.168.200.3 SRC packets: 122875 bytes: 14531084 DST packets:
145748 bytes: 170332152
IP: 192.168.200.4 SRC packets: 142254 bytes: 18836983 DST packets:
106100 bytes: 26420351
IP: 192.168.200.5 SRC packets: 3424090 bytes: 181079976 DST packets:
6948051 bytes: 1798270528
IP: 192.168.200.6 SRC packets: 2758 bytes: 234311 DST packets: 12875
bytes: 18882957
IP: 192.168.200.9 SRC packets: 74277 bytes: 8864576 DST packets: 21888
bytes: 5834302
IP: 192.168.200.10 SRC packets: 583 bytes: 44836 DST packets: 623 bytes:
177505
IP: 192.168.200.253 SRC packets: 157 bytes: 11899 DST packets: 156
bytes: 12834
Showing table: indians
IP: 10.0.0.2 SRC packets: 1108147 bytes: 105913984 DST packets: 2698261
bytes: 3740346675
IP: 10.0.0.3 SRC packets: 362460 bytes: 145188605 DST packets: 300909
bytes: 136230642
Now, I would like to put this to the new array but under two conditions:
- only lines starting with IP should be considered
- only IP address and digital values should be extracted
So, the final array should look like this one:
192.168.200.1 4196607 292644635 7224498 762829278
192.168.200.2 77289 4799573 324472 481821874
192.168.200.3 122875 14531084 145748 170332152
192.168.200.4 142254 18836983 106100 26420351
192.168.200.5 3424090 181079976 6948051 1798270528
192.168.200.6 2758 234311 12875 18882957
192.168.200.9 74277 8864576 21888 5834302
192.168.200.10 583 44836 623 177505
192.168.200.253 157 11899 156 12834
10.0.0.2 1108147 105913984 2698261 3740346675
10.0.0.3 362460 145188605 300909 136230642
Or, perhaps, doesn’t have to be an array, I’m open for suggestions.
Later, I will process each line separately and transfer all records to
rrd database.
Cheers,
Thomas