• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 189
  • Last Modified:

Dirty Data and Errors

I want to scan a log file for bad connections, looking in column #3, and #6 only. I only want to print lines that have a numerical value of greater than say 250. Some of the columns might have non-numerical values in them. They should not be included.

I have included output below. I would only want the line starting with "name1" to be printed. The value to be over 250 could be either #3, or #6.

Router   Interface     ---ES--  --SES--  --SEFS-  --UAS--  --CSS--  --PCV--  --LES--  --BES--  -TotVal-
name1 T1_0/0/0       389        9       43       38        0     3110        0      279       96
name2 T1_0/0/0         0        0        0        0        0        0        0        0       96
name3 T1_0/0/1         0        0        0        0        0        0        0        0       96
name4 T1_0/1/0         0        0        0        0        0        0        0        0       96
0
stakor
Asked:
stakor
2 Solutions
 
ozoCommented:
perl -ane 'print if $F[2]>250 || $F[6]>250' file.log
0
 
wilcoxonCommented:
Try this...
#!/usr/local/bin/perl
use strict;
use warnings;
my $fil = shift or die "Usage: $0 logfile\n";
open IN, $fil or die "could not open $fil: $!";
while (<IN>) {
    next if /^\s*Router\s*Interface\b/; # skip header row
    my @cols = split;
    print if ($cols[2] > 250 or $cols[5] > 250); # perl is 0-based so this is cols 3 and 6
}
close IN;

Open in new window

0

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now