in reply to Telnet Output

Here is what I would try first:

# Here be ***UNTESTED*** code my %snr; while ( my $line = shift @lines ) { chomp $line; if ( $line =~ m/SNR:\s+(\d+)\s+(\d+)/ ) { ( $snr{up}, $snr{down} ) = ( $1, $2 ); last; } } print q{Upstream_SNR:}, $snr{up}, q{ }, q{Downstream_SNR:}, $snr{down}, qq{\n};
(The print based on a quick glance at Chapter 11 of the Cacti manual.)

Hope that helps.

Update: 2013-12-30
Fix typo in code (missing underscore in second field name).

Replies are listed 'Best First'.
Re^2: Telnet Output
by jmutton (Initiate) on Jan 01, 2014 at 21:19 UTC
    Thanks for the reply. How would it work if I had multiple SNRs? For examples
    SNR Margin 60 60 (US0,--) 0.1 dB SNR Margin 61 53 (US1,DS1) 0.1 dB SNR Margin 62 50 (US2,DS2) 0.1 dB SNR Margin 0 N/A (US3,DS3) 0.1 dB SNR Margin 0 N/A (US4,DS4) 0.1 dB
      my %snr; while ( my $line = shift @lines ) { chomp $line; # (US0,--) 0.1 dB if ( $line =~ m/SNR Margin:\s*(\d+)\s+(\d+)\s*\(US0,--\) 0.1 dB/ ) + { ( $snr{us0} ) = ( $1 ); } # (US1,DS1) 0.1 dB if ( $line =~ m/SNR Margin:\s*(\d+)\s+(\d+)\s*\(US1,DS1\) 0.1 dB/ +) { ( $snr{us1}, $snr{ds1} ) = ( $1, $2 ); } # (US2,DS2) 0.1 dB if ( $line =~ m/SNR Margin:\s*(\d+)\s+(\d+)\s*\(US2,DS2\) 0.1 dB/ +) { ( $snr{us2}, $snr{ds2} ) = ( $1, $2 ); } # (US3,DS3) 0.1 dB if ( $line =~ m/SNR Margin:\s*(\d+)\s+(\d+)\s*\(US3,DS3\) 0.1 dB/ +) { ( $snr{us3}, $snr{ds3} ) = ( $1, $2 ); } # (US4,DS4) 0.1 dB if ( $line =~ m/SNR Margin:\s*(\d+)\s+(\d+)\s*\(US4,DS4\) 0.1 dB/ +) { ( $snr{us4}, $snr{ds4} ) = ( $1, $2 ); } } print q{US0:}, $snr{us0}, qq{\n}; print q{US1:}, $snr{us1}, q{ }, q{DS1:}, $snr{ds1}, qq{\n}; print q{US2:}, $snr{us2}, q{ }, q{DS2:}, $snr{ds2}, qq{\n}; print q{US3:}, $snr{us3}, q{ }, q{DS3:}, $snr{ds3}, qq{\n}; print q{US4:}, $snr{us4}, q{ }, q{DS4:}, $snr{ds4}, qq{\n};
      Thats what I've managed to come up with. But I need some sort of checking as some of the SNRs will report 0 or N/A. Need it to report 0 instead of N/A.