Loading ...
Sorry, an error occurred while loading the content.
 

[PBML] Re: Use split

Expand Messages
  • perl_beg
    Hi Dave, yeah I would say I m no where near a programmer just do basic scripts. Here is what I m trying to do. I m using a hash so I don t get duplicate names
    Message 1 of 15 , Apr 7, 2008
      Hi Dave, yeah I would say I'm no where near a programmer just do
      basic scripts. Here is what I'm trying to do. I'm using a hash so I
      don't get duplicate names when I print off usernames that I pull
      from the log file.

      #!/usr/bin/perl -w

      %u_count = ();

      open (LOG,"cat /var/log/app.log | egrep ' -j ' | egrep -v ' -j [0-
      9]' | grep start|") || die "Cannot open file";
      while (<LOG>) {
      chomp();
      @_ = split(/\s+/,7);
      $u_count{$_}++;
      }

      @users = sort keys %u_count;

      foreach $user (@users) {
      print "$user\n";
      }



      --- In perl-beginner@yahoogroups.com, david wright
      <david_v_wright@...> wrote:
      >
      > > You can also use array concept.
      > >
      > > for (my $c=0;$c<7 ;$c++)
      > > {
      > > $array1[$c]=$array[$c];
      > > }
      > > ...
      >
      > generally, a perl programmer would prefer something to the affect
      of:
      >
      > my $str='Thu Apr 3 16:15:11 2008 started 18411 user 1 16:14:25
      app=unknown pwd=unknown make -j app';
      >
      > push(my @tokes, split(/\s+/, $str));
      >
      > or:
      > my @tokes = map{ split(/\s+/, $_) } $str;
      >
      > or:
      > my @tokes = map{ split } $str;
      >
      > use Data::Dumper;
      > #print Dumper \@tokes;
      > print $tokes[7];
      >
      >
      > +Dave
      >
      >
      > --- On Fri, 4/4/08, PRAVEEN CHAUHAN <best_praveen2006@...> wrote:
      >
      > > From: PRAVEEN CHAUHAN <best_praveen2006@...>
      > > Subject: [PBML] Re: Use split
      > > To: perl-beginner@yahoogroups.com
      > > Date: Friday, April 4, 2008, 1:54 AM
      > > Hi,
      > >
      > > You can also use array concept. Below is the scipt.
      > >
      > >
      > > #!/usr/bin/perl
      > > print "Hello, World...\n\n\n";
      > > my $str="Thu Apr 3 16:15:11 2008 started 18411 user 1
      > > 16:14:25
      > > app=unknown pwd=unknown make -j app";
      > > my @array=split(" ",$str);
      > > my (@array1,@array2)=();
      > > print "\n Split input by space and store in array:
      > > @array\n\n\n";
      > >
      > > for (my $c=0;$c<7 ;$c++)
      > > {
      > > $array1[$c]=$array[$c];
      > > }
      > >
      > > for ($c=7,my $cc=0;$c<15 ;$c++,$cc++)
      > > {
      > > $array2[$cc]=$array[$c];
      > > }
      > >
      > > print "\n\n\n\t Now array split in two
      > > array \n\n\n";
      > > print "Output of Array1:
      > > @array1\n\n\n";
      > > print "Output of Array2:
      > > @array2\n\n\n";
      > >
      > >
      > >
      > > Thanks
      > > Praveen
      > > Delhi(India)
      > >
      > >
      > >
      > > --- In perl-beginner@yahoogroups.com, "perl_beg"
      > > <perl_beg@>
      > > wrote:
      > > >
      > > > How could I split the following content on the 8th
      > > item
      > > (username)?
      > > > I've tried doing the split(/ /); but was not
      > > successful.
      > > >
      > > > Thu Apr 3 16:15:11 2008 started 18411 user 1 16:14:25
      > > app=unknown
      > > > pwd=unknown make -j app
      > > >
      > > > Any help would be appreciated.
      > > >
      > >
      > >
      > >
      > > ------------------------------------
      > >
      > > Unsubscribing info is here:
      > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
      > > Groups Links
      > >
      > >
      > >
      >
    • david wright
      Hello perl_beg, I would offer the following suggestions for approaching your task It seems unnecessary in this case to open a pipe to perl open from shell
      Message 2 of 15 , Apr 8, 2008
        Hello perl_beg,

        I would offer the following suggestions for approaching your task

        It seems unnecessary in this case to open a pipe to perl open from shell commands

        I'm not sure what '/var/log/app.log' looks like but if it's a tab delimited and 'users' is your 7th column, you could use shell commands alone, something such as:

        awk '{print $7}' | sort | uniq -c | sort -nr

        however since this is a perl list, lets look at that.


        just open the file directly:

        > open (LOG,"cat /var/log/app.log | egrep ' -j ' | egrep -v ' -j [0-
        9]' | grep start|") || die "Cannot open file";

        open my $log,'<', '/var/log/app.log' || die "Cannot open file $!";

        > @_ = split(/\s+/,7);

        I think you want something like,

        my $user = (split(/\s+/, $_))[7];
        $u_count{$user}++;

        from:
        perldoc -f split
        split /PATTERN/,EXPR,LIMIT

        also I would add use strict; in the beginning of your script.

        other than that it looks like your on the right track, good work, keep it up :)

        +Dave



        --- On Mon, 4/7/08, perl_beg <perl_beg@...> wrote:

        > From: perl_beg <perl_beg@...>
        > Subject: [PBML] Re: Use split
        > To: perl-beginner@yahoogroups.com
        > Date: Monday, April 7, 2008, 2:17 PM
        > Hi Dave, yeah I would say I'm no where near a programmer
        > just do
        > basic scripts. Here is what I'm trying to do. I'm
        > using a hash so I
        > don't get duplicate names when I print off usernames
        > that I pull
        > from the log file.
        >
        > #!/usr/bin/perl -w
        >
        > %u_count = ();
        >
        > open (LOG,"cat /var/log/app.log | egrep ' -j '
        > | egrep -v ' -j [0-
        > 9]' | grep start|") || die "Cannot open
        > file";
        > while (<LOG>) {
        > chomp();
        > @_ = split(/\s+/,7);
        > $u_count{$_}++;
        > }
        >
        > @users = sort keys %u_count;
        >
        > foreach $user (@users) {
        > print "$user\n";
        > }
        >
        >
        >
        > --- In perl-beginner@yahoogroups.com, david wright
        > <david_v_wright@...> wrote:
        > >
        > > > You can also use array concept.
        > > >
        > > > for (my $c=0;$c<7 ;$c++)
        > > > {
        > > > $array1[$c]=$array[$c];
        > > > }
        > > > ...
        > >
        > > generally, a perl programmer would prefer something to
        > the affect
        > of:
        > >
        > > my $str='Thu Apr 3 16:15:11 2008 started 18411
        > user 1 16:14:25
        > app=unknown pwd=unknown make -j app';
        > >
        > > push(my @tokes, split(/\s+/, $str));
        > >
        > > or:
        > > my @tokes = map{ split(/\s+/, $_) } $str;
        > >
        > > or:
        > > my @tokes = map{ split } $str;
        > >
        > > use Data::Dumper;
        > > #print Dumper \@tokes;
        > > print $tokes[7];
        > >
        > >
        > > +Dave
        > >
        > >
        > > --- On Fri, 4/4/08, PRAVEEN CHAUHAN
        > <best_praveen2006@...> wrote:
        > >
        > > > From: PRAVEEN CHAUHAN
        > <best_praveen2006@...>
        > > > Subject: [PBML] Re: Use split
        > > > To: perl-beginner@yahoogroups.com
        > > > Date: Friday, April 4, 2008, 1:54 AM
        > > > Hi,
        > > >
        > > > You can also use array concept. Below is the
        > scipt.
        > > >
        > > >
        > > > #!/usr/bin/perl
        > > > print "Hello,
        > World...\n\n\n";
        > > > my $str="Thu Apr 3 16:15:11 2008 started
        > 18411 user 1
        > > > 16:14:25
        > > > app=unknown pwd=unknown make -j app";
        > > > my @array=split(" ",$str);
        > > > my (@array1,@array2)=();
        > > > print "\n Split input by space and store
        > in array:
        > > > @array\n\n\n";
        > > >
        > > > for (my $c=0;$c<7 ;$c++)
        > > > {
        > > > $array1[$c]=$array[$c];
        > > > }
        > > >
        > > > for ($c=7,my $cc=0;$c<15 ;$c++,$cc++)
        > > > {
        > > > $array2[$cc]=$array[$c];
        > > > }
        > > >
        > > > print "\n\n\n\t Now array
        > split in two
        > > > array \n\n\n";
        > > > print "Output of Array1:
        > > > @array1\n\n\n";
        > > > print "Output of Array2:
        > > > @array2\n\n\n";
        > > >
        > > >
        > > >
        > > > Thanks
        > > > Praveen
        > > > Delhi(India)
        > > >
        > > >
        > > >
        > > > --- In perl-beginner@yahoogroups.com,
        > "perl_beg"
        > > > <perl_beg@>
        > > > wrote:
        > > > >
        > > > > How could I split the following content on
        > the 8th
        > > > item
        > > > (username)?
        > > > > I've tried doing the split(/ /); but was
        > not
        > > > successful.
        > > > >
        > > > > Thu Apr 3 16:15:11 2008 started 18411 user
        > 1 16:14:25
        > > > app=unknown
        > > > > pwd=unknown make -j app
        > > > >
        > > > > Any help would be appreciated.
        > > > >
        > > >
        > > >
        > > >
        > > > ------------------------------------
        > > >
        > > > Unsubscribing info is here:
        > > >
        > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
        > > > Groups Links
        > > >
        > > >
        > > >
        > >
        >
        >
        >
        > ------------------------------------
        >
        > Unsubscribing info is here:
        > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
        > Groups Links
        >
        >
        >
      • perl_beg
        Hi Dave, I want to use the open with a while loop to grep certain strings out of this log file because it s massive and those are the only usernames I want.
        Message 3 of 15 , Apr 11, 2008
          Hi Dave, I want to use the open with a while loop to grep certain
          strings out of this log file because it's massive and those are the
          only usernames I want. Otherwise I'm grabbing useless info.

          Your suggestions worked and I now have a working script. Few
          questions. What if I wanted to grab more than just the 7th column?
          Would that involve a lot more work or could I just do [2,3,7] in my
          syntax;?

          perl_beg

          --- In perl-beginner@yahoogroups.com, david wright
          <david_v_wright@...> wrote:
          >
          > Hello perl_beg,
          >
          > I would offer the following suggestions for approaching your task
          >
          > It seems unnecessary in this case to open a pipe to perl open from
          shell commands
          >
          > I'm not sure what '/var/log/app.log' looks like but if it's a tab
          delimited and 'users' is your 7th column, you could use shell
          commands alone, something such as:
          >
          > awk '{print $7}' | sort | uniq -c | sort -nr
          >
          > however since this is a perl list, lets look at that.
          >
          >
          > just open the file directly:
          >
          > > open (LOG,"cat /var/log/app.log | egrep ' -j ' | egrep -v ' -j
          [0-
          > 9]' | grep start|") || die "Cannot open file";
          >
          > open my $log,'<', '/var/log/app.log' || die "Cannot open file $!";
          >
          > > @_ = split(/\s+/,7);
          >
          > I think you want something like,
          >
          > my $user = (split(/\s+/, $_))[7];
          > $u_count{$user}++;
          >
          > from:
          > perldoc -f split
          > split /PATTERN/,EXPR,LIMIT
          >
          > also I would add use strict; in the beginning of your script.
          >
          > other than that it looks like your on the right track, good work,
          keep it up :)
          >
          > +Dave
          >
          >
          >
          > --- On Mon, 4/7/08, perl_beg <perl_beg@...> wrote:
          >
          > > From: perl_beg <perl_beg@...>
          > > Subject: [PBML] Re: Use split
          > > To: perl-beginner@yahoogroups.com
          > > Date: Monday, April 7, 2008, 2:17 PM
          > > Hi Dave, yeah I would say I'm no where near a programmer
          > > just do
          > > basic scripts. Here is what I'm trying to do. I'm
          > > using a hash so I
          > > don't get duplicate names when I print off usernames
          > > that I pull
          > > from the log file.
          > >
          > > #!/usr/bin/perl -w
          > >
          > > %u_count = ();
          > >
          > > open (LOG,"cat /var/log/app.log | egrep ' -j '
          > > | egrep -v ' -j [0-
          > > 9]' | grep start|") || die "Cannot open
          > > file";
          > > while (<LOG>) {
          > > chomp();
          > > @_ = split(/\s+/,7);
          > > $u_count{$_}++;
          > > }
          > >
          > > @users = sort keys %u_count;
          > >
          > > foreach $user (@users) {
          > > print "$user\n";
          > > }
          > >
          > >
          > >
          > > --- In perl-beginner@yahoogroups.com, david wright
          > > <david_v_wright@> wrote:
          > > >
          > > > > You can also use array concept.
          > > > >
          > > > > for (my $c=0;$c<7 ;$c++)
          > > > > {
          > > > > $array1[$c]=$array[$c];
          > > > > }
          > > > > ...
          > > >
          > > > generally, a perl programmer would prefer something to
          > > the affect
          > > of:
          > > >
          > > > my $str='Thu Apr 3 16:15:11 2008 started 18411
          > > user 1 16:14:25
          > > app=unknown pwd=unknown make -j app';
          > > >
          > > > push(my @tokes, split(/\s+/, $str));
          > > >
          > > > or:
          > > > my @tokes = map{ split(/\s+/, $_) } $str;
          > > >
          > > > or:
          > > > my @tokes = map{ split } $str;
          > > >
          > > > use Data::Dumper;
          > > > #print Dumper \@tokes;
          > > > print $tokes[7];
          > > >
          > > >
          > > > +Dave
          > > >
          > > >
          > > > --- On Fri, 4/4/08, PRAVEEN CHAUHAN
          > > <best_praveen2006@> wrote:
          > > >
          > > > > From: PRAVEEN CHAUHAN
          > > <best_praveen2006@>
          > > > > Subject: [PBML] Re: Use split
          > > > > To: perl-beginner@yahoogroups.com
          > > > > Date: Friday, April 4, 2008, 1:54 AM
          > > > > Hi,
          > > > >
          > > > > You can also use array concept. Below is the
          > > scipt.
          > > > >
          > > > >
          > > > > #!/usr/bin/perl
          > > > > print "Hello,
          > > World...\n\n\n";
          > > > > my $str="Thu Apr 3 16:15:11 2008 started
          > > 18411 user 1
          > > > > 16:14:25
          > > > > app=unknown pwd=unknown make -j app";
          > > > > my @array=split(" ",$str);
          > > > > my (@array1,@array2)=();
          > > > > print "\n Split input by space and store
          > > in array:
          > > > > @array\n\n\n";
          > > > >
          > > > > for (my $c=0;$c<7 ;$c++)
          > > > > {
          > > > > $array1[$c]=$array[$c];
          > > > > }
          > > > >
          > > > > for ($c=7,my $cc=0;$c<15 ;$c++,$cc++)
          > > > > {
          > > > > $array2[$cc]=$array[$c];
          > > > > }
          > > > >
          > > > > print "\n\n\n\t Now array
          > > split in two
          > > > > array \n\n\n";
          > > > > print "Output of Array1:
          > > > > @array1\n\n\n";
          > > > > print "Output of Array2:
          > > > > @array2\n\n\n";
          > > > >
          > > > >
          > > > >
          > > > > Thanks
          > > > > Praveen
          > > > > Delhi(India)
          > > > >
          > > > >
          > > > >
          > > > > --- In perl-beginner@yahoogroups.com,
          > > "perl_beg"
          > > > > <perl_beg@>
          > > > > wrote:
          > > > > >
          > > > > > How could I split the following content on
          > > the 8th
          > > > > item
          > > > > (username)?
          > > > > > I've tried doing the split(/ /); but was
          > > not
          > > > > successful.
          > > > > >
          > > > > > Thu Apr 3 16:15:11 2008 started 18411 user
          > > 1 16:14:25
          > > > > app=unknown
          > > > > > pwd=unknown make -j app
          > > > > >
          > > > > > Any help would be appreciated.
          > > > > >
          > > > >
          > > > >
          > > > >
          > > > > ------------------------------------
          > > > >
          > > > > Unsubscribing info is here:
          > > > >
          > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
          > > > > Groups Links
          > > > >
          > > > >
          > > > >
          > > >
          > >
          > >
          > >
          > > ------------------------------------
          > >
          > > Unsubscribing info is here:
          > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
          > > Groups Links
          > >
          > >
          > >
          >
        • merlyn@stonehenge.com
          ... perl open (LOG, cat /var/log/app.log | egrep -j | egrep -v -j [0- perl 9] | grep start| ) || die Cannot open file ; Aha! A useless use of cat .
          Message 4 of 15 , Apr 11, 2008
            >>>>> "perl" == perl beg <perl_beg@...> writes:

            perl> open (LOG,"cat /var/log/app.log | egrep ' -j ' | egrep -v ' -j [0-
            perl> 9]' | grep start|") || die "Cannot open file";

            Aha! A "useless use of cat". If this had been a posting to
            comp.unix.questions, I would have issued you a "useless use of cat" award.

            --
            Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
            <merlyn@...> <URL:http://www.stonehenge.com/merlyn/>
            Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
            See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
          • david wright
            ... did you try it? ;) my ($col3,$col4,$user) = (split(/ s+/, $str))[2,3,7]; perl is a great language for learning by trying stuff, feel free to experiment.
            Message 5 of 15 , Apr 13, 2008
              > What if I wanted to grab more than just the 7th
              > column?
              > Would that involve a lot more work or could I just do
              > [2,3,7] in my
              > syntax;?
              >

              did you try it? ;)

              my ($col3,$col4,$user) = (split(/\s+/, $str))[2,3,7];

              perl is a great language for learning by trying stuff, feel free to experiment.

              +Dave

              > --- In perl-beginner@yahoogroups.com, david wright
              > <david_v_wright@...> wrote:
              > >
              > > Hello perl_beg,
              > >
              > > I would offer the following suggestions for
              > approaching your task
              > >
              > > It seems unnecessary in this case to open a pipe to
              > perl open from
              > shell commands
              > >
              > > I'm not sure what '/var/log/app.log' looks
              > like but if it's a tab
              > delimited and 'users' is your 7th column, you could
              > use shell
              > commands alone, something such as:
              > >
              > > awk '{print $7}' | sort | uniq -c | sort -nr
              > >
              > > however since this is a perl list, lets look at that.
              > >
              > >
              > > just open the file directly:
              > >
              > > > open (LOG,"cat /var/log/app.log | egrep
              > ' -j ' | egrep -v ' -j
              > [0-
              > > 9]' | grep start|") || die "Cannot open
              > file";
              > >
              > > open my $log,'<',
              > '/var/log/app.log' || die "Cannot open file
              > $!";
              > >
              > > > @_ = split(/\s+/,7);
              > >
              > > I think you want something like,
              > >
              > > my $user = (split(/\s+/, $_))[7];
              > > $u_count{$user}++;
              > >
              > > from:
              > > perldoc -f split
              > > split /PATTERN/,EXPR,LIMIT
              > >
              > > also I would add use strict; in the beginning of your
              > script.
              > >
              > > other than that it looks like your on the right track,
              > good work,
              > keep it up :)
              > >
              > > +Dave
              > >
              > >
              > >
              > > --- On Mon, 4/7/08, perl_beg <perl_beg@...>
              > wrote:
              > >
              > > > From: perl_beg <perl_beg@...>
              > > > Subject: [PBML] Re: Use split
              > > > To: perl-beginner@yahoogroups.com
              > > > Date: Monday, April 7, 2008, 2:17 PM
              > > > Hi Dave, yeah I would say I'm no where near a
              > programmer
              > > > just do
              > > > basic scripts. Here is what I'm trying to do.
              > I'm
              > > > using a hash so I
              > > > don't get duplicate names when I print off
              > usernames
              > > > that I pull
              > > > from the log file.
              > > >
              > > > #!/usr/bin/perl -w
              > > >
              > > > %u_count = ();
              > > >
              > > > open (LOG,"cat /var/log/app.log | egrep
              > ' -j '
              > > > | egrep -v ' -j [0-
              > > > 9]' | grep start|") || die "Cannot
              > open
              > > > file";
              > > > while (<LOG>) {
              > > > chomp();
              > > > @_ = split(/\s+/,7);
              > > > $u_count{$_}++;
              > > > }
              > > >
              > > > @users = sort keys %u_count;
              > > >
              > > > foreach $user (@users) {
              > > > print "$user\n";
              > > > }
              > > >
              > > >
              > > >
              > > > --- In perl-beginner@yahoogroups.com, david
              > wright
              > > > <david_v_wright@> wrote:
              > > > >
              > > > > > You can also use array concept.
              > > > > >
              > > > > > for (my $c=0;$c<7 ;$c++)
              > > > > > {
              > > > > > $array1[$c]=$array[$c];
              > > > > > }
              > > > > > ...
              > > > >
              > > > > generally, a perl programmer would prefer
              > something to
              > > > the affect
              > > > of:
              > > > >
              > > > > my $str='Thu Apr 3 16:15:11 2008
              > started 18411
              > > > user 1 16:14:25
              > > > app=unknown pwd=unknown make -j app';
              > > > >
              > > > > push(my @tokes, split(/\s+/, $str));
              > > > >
              > > > > or:
              > > > > my @tokes = map{ split(/\s+/, $_) }
              > $str;
              > > > >
              > > > > or:
              > > > > my @tokes = map{ split } $str;
              > > > >
              > > > > use Data::Dumper;
              > > > > #print Dumper \@tokes;
              > > > > print $tokes[7];
              > > > >
              > > > >
              > > > > +Dave
              > > > >
              > > > >
              > > > > --- On Fri, 4/4/08, PRAVEEN CHAUHAN
              > > > <best_praveen2006@> wrote:
              > > > >
              > > > > > From: PRAVEEN CHAUHAN
              > > > <best_praveen2006@>
              > > > > > Subject: [PBML] Re: Use split
              > > > > > To: perl-beginner@yahoogroups.com
              > > > > > Date: Friday, April 4, 2008, 1:54 AM
              > > > > > Hi,
              > > > > >
              > > > > > You can also use array concept. Below
              > is the
              > > > scipt.
              > > > > >
              > > > > >
              > > > > > #!/usr/bin/perl
              > > > > > print "Hello,
              > > > World...\n\n\n";
              > > > > > my $str="Thu Apr 3 16:15:11 2008
              > started
              > > > 18411 user 1
              > > > > > 16:14:25
              > > > > > app=unknown pwd=unknown make -j
              > app";
              > > > > > my @array=split(" ",$str);
              > > > > > my (@array1,@array2)=();
              > > > > > print "\n Split input by space
              > and store
              > > > in array:
              > > > > > @array\n\n\n";
              > > > > >
              > > > > > for (my $c=0;$c<7 ;$c++)
              > > > > > {
              > > > > > $array1[$c]=$array[$c];
              > > > > > }
              > > > > >
              > > > > > for ($c=7,my $cc=0;$c<15
              > ;$c++,$cc++)
              > > > > > {
              > > > > > $array2[$cc]=$array[$c];
              > > > > > }
              > > > > >
              > > > > > print "\n\n\n\t
              > Now array
              > > > split in two
              > > > > > array \n\n\n";
              > > > > > print "Output of Array1:
              > > > > > @array1\n\n\n";
              > > > > > print "Output of Array2:
              > > > > > @array2\n\n\n";
              > > > > >
              > > > > >
              > > > > >
              > > > > > Thanks
              > > > > > Praveen
              > > > > > Delhi(India)
              > > > > >
              > > > > >
              > > > > >
              > > > > > --- In perl-beginner@yahoogroups.com,
              > > > "perl_beg"
              > > > > > <perl_beg@>
              > > > > > wrote:
              > > > > > >
              > > > > > > How could I split the following
              > content on
              > > > the 8th
              > > > > > item
              > > > > > (username)?
              > > > > > > I've tried doing the split(/
              > /); but was
              > > > not
              > > > > > successful.
              > > > > > >
              > > > > > > Thu Apr 3 16:15:11 2008 started
              > 18411 user
              > > > 1 16:14:25
              > > > > > app=unknown
              > > > > > > pwd=unknown make -j app
              > > > > > >
              > > > > > > Any help would be appreciated.
              > > > > > >
              > > > > >
              > > > > >
              > > > > >
              > > > > > ------------------------------------
              > > > > >
              > > > > > Unsubscribing info is here:
              > > > > >
              > > >
              > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
              > > > > > Groups Links
              > > > > >
              > > > > >
              > > > > >
              > > > >
              > > >
              > > >
              > > >
              > > > ------------------------------------
              > > >
              > > > Unsubscribing info is here:
              > > >
              > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
              > > > Groups Links
              > > >
              > > >
              > > >
              > >
              >
              >
              >
              > ------------------------------------
              >
              > Unsubscribing info is here:
              > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
              > Groups Links
              >
              >
              >
            • perl_beg
              Hi Dave, I did try it and did not get the results I wanted. That s because I was missing a few scalar variables ($col3 and $col4). Nice it works fine now. I
              Message 6 of 15 , Apr 15, 2008
                Hi Dave, I did try it and did not get the results I wanted. That's
                because I was missing a few scalar variables ($col3 and $col4). Nice
                it works fine now. I appreciate the help.



                --- In perl-beginner@yahoogroups.com, david wright
                <david_v_wright@...> wrote:
                >
                > > What if I wanted to grab more than just the 7th
                > > column?
                > > Would that involve a lot more work or could I just do
                > > [2,3,7] in my
                > > syntax;?
                > >
                >
                > did you try it? ;)
                >
                > my ($col3,$col4,$user) = (split(/\s+/, $str))[2,3,7];
                >
                > perl is a great language for learning by trying stuff, feel free
                to experiment.
                >
                > +Dave
                >
                > > --- In perl-beginner@yahoogroups.com, david wright
                > > <david_v_wright@> wrote:
                > > >
                > > > Hello perl_beg,
                > > >
                > > > I would offer the following suggestions for
                > > approaching your task
                > > >
                > > > It seems unnecessary in this case to open a pipe to
                > > perl open from
                > > shell commands
                > > >
                > > > I'm not sure what '/var/log/app.log' looks
                > > like but if it's a tab
                > > delimited and 'users' is your 7th column, you could
                > > use shell
                > > commands alone, something such as:
                > > >
                > > > awk '{print $7}' | sort | uniq -c | sort -nr
                > > >
                > > > however since this is a perl list, lets look at that.
                > > >
                > > >
                > > > just open the file directly:
                > > >
                > > > > open (LOG,"cat /var/log/app.log | egrep
                > > ' -j ' | egrep -v ' -j
                > > [0-
                > > > 9]' | grep start|") || die "Cannot open
                > > file";
                > > >
                > > > open my $log,'<',
                > > '/var/log/app.log' || die "Cannot open file
                > > $!";
                > > >
                > > > > @_ = split(/\s+/,7);
                > > >
                > > > I think you want something like,
                > > >
                > > > my $user = (split(/\s+/, $_))[7];
                > > > $u_count{$user}++;
                > > >
                > > > from:
                > > > perldoc -f split
                > > > split /PATTERN/,EXPR,LIMIT
                > > >
                > > > also I would add use strict; in the beginning of your
                > > script.
                > > >
                > > > other than that it looks like your on the right track,
                > > good work,
                > > keep it up :)
                > > >
                > > > +Dave
                > > >
                > > >
                > > >
                > > > --- On Mon, 4/7/08, perl_beg <perl_beg@>
                > > wrote:
                > > >
                > > > > From: perl_beg <perl_beg@>
                > > > > Subject: [PBML] Re: Use split
                > > > > To: perl-beginner@yahoogroups.com
                > > > > Date: Monday, April 7, 2008, 2:17 PM
                > > > > Hi Dave, yeah I would say I'm no where near a
                > > programmer
                > > > > just do
                > > > > basic scripts. Here is what I'm trying to do.
                > > I'm
                > > > > using a hash so I
                > > > > don't get duplicate names when I print off
                > > usernames
                > > > > that I pull
                > > > > from the log file.
                > > > >
                > > > > #!/usr/bin/perl -w
                > > > >
                > > > > %u_count = ();
                > > > >
                > > > > open (LOG,"cat /var/log/app.log | egrep
                > > ' -j '
                > > > > | egrep -v ' -j [0-
                > > > > 9]' | grep start|") || die "Cannot
                > > open
                > > > > file";
                > > > > while (<LOG>) {
                > > > > chomp();
                > > > > @_ = split(/\s+/,7);
                > > > > $u_count{$_}++;
                > > > > }
                > > > >
                > > > > @users = sort keys %u_count;
                > > > >
                > > > > foreach $user (@users) {
                > > > > print "$user\n";
                > > > > }
                > > > >
                > > > >
                > > > >
                > > > > --- In perl-beginner@yahoogroups.com, david
                > > wright
                > > > > <david_v_wright@> wrote:
                > > > > >
                > > > > > > You can also use array concept.
                > > > > > >
                > > > > > > for (my $c=0;$c<7 ;$c++)
                > > > > > > {
                > > > > > > $array1[$c]=$array[$c];
                > > > > > > }
                > > > > > > ...
                > > > > >
                > > > > > generally, a perl programmer would prefer
                > > something to
                > > > > the affect
                > > > > of:
                > > > > >
                > > > > > my $str='Thu Apr 3 16:15:11 2008
                > > started 18411
                > > > > user 1 16:14:25
                > > > > app=unknown pwd=unknown make -j app';
                > > > > >
                > > > > > push(my @tokes, split(/\s+/, $str));
                > > > > >
                > > > > > or:
                > > > > > my @tokes = map{ split(/\s+/, $_) }
                > > $str;
                > > > > >
                > > > > > or:
                > > > > > my @tokes = map{ split } $str;
                > > > > >
                > > > > > use Data::Dumper;
                > > > > > #print Dumper \@tokes;
                > > > > > print $tokes[7];
                > > > > >
                > > > > >
                > > > > > +Dave
                > > > > >
                > > > > >
                > > > > > --- On Fri, 4/4/08, PRAVEEN CHAUHAN
                > > > > <best_praveen2006@> wrote:
                > > > > >
                > > > > > > From: PRAVEEN CHAUHAN
                > > > > <best_praveen2006@>
                > > > > > > Subject: [PBML] Re: Use split
                > > > > > > To: perl-beginner@yahoogroups.com
                > > > > > > Date: Friday, April 4, 2008, 1:54 AM
                > > > > > > Hi,
                > > > > > >
                > > > > > > You can also use array concept. Below
                > > is the
                > > > > scipt.
                > > > > > >
                > > > > > >
                > > > > > > #!/usr/bin/perl
                > > > > > > print "Hello,
                > > > > World...\n\n\n";
                > > > > > > my $str="Thu Apr 3 16:15:11 2008
                > > started
                > > > > 18411 user 1
                > > > > > > 16:14:25
                > > > > > > app=unknown pwd=unknown make -j
                > > app";
                > > > > > > my @array=split(" ",$str);
                > > > > > > my (@array1,@array2)=();
                > > > > > > print "\n Split input by space
                > > and store
                > > > > in array:
                > > > > > > @array\n\n\n";
                > > > > > >
                > > > > > > for (my $c=0;$c<7 ;$c++)
                > > > > > > {
                > > > > > > $array1[$c]=$array[$c];
                > > > > > > }
                > > > > > >
                > > > > > > for ($c=7,my $cc=0;$c<15
                > > ;$c++,$cc++)
                > > > > > > {
                > > > > > > $array2[$cc]=$array[$c];
                > > > > > > }
                > > > > > >
                > > > > > > print "\n\n\n\t
                > > Now array
                > > > > split in two
                > > > > > > array \n\n\n";
                > > > > > > print "Output of Array1:
                > > > > > > @array1\n\n\n";
                > > > > > > print "Output of Array2:
                > > > > > > @array2\n\n\n";
                > > > > > >
                > > > > > >
                > > > > > >
                > > > > > > Thanks
                > > > > > > Praveen
                > > > > > > Delhi(India)
                > > > > > >
                > > > > > >
                > > > > > >
                > > > > > > --- In perl-beginner@yahoogroups.com,
                > > > > "perl_beg"
                > > > > > > <perl_beg@>
                > > > > > > wrote:
                > > > > > > >
                > > > > > > > How could I split the following
                > > content on
                > > > > the 8th
                > > > > > > item
                > > > > > > (username)?
                > > > > > > > I've tried doing the split(/
                > > /); but was
                > > > > not
                > > > > > > successful.
                > > > > > > >
                > > > > > > > Thu Apr 3 16:15:11 2008 started
                > > 18411 user
                > > > > 1 16:14:25
                > > > > > > app=unknown
                > > > > > > > pwd=unknown make -j app
                > > > > > > >
                > > > > > > > Any help would be appreciated.
                > > > > > > >
                > > > > > >
                > > > > > >
                > > > > > >
                > > > > > > ------------------------------------
                > > > > > >
                > > > > > > Unsubscribing info is here:
                > > > > > >
                > > > >
                > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
                > > > > > > Groups Links
                > > > > > >
                > > > > > >
                > > > > > >
                > > > > >
                > > > >
                > > > >
                > > > >
                > > > > ------------------------------------
                > > > >
                > > > > Unsubscribing info is here:
                > > > >
                > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
                > > > > Groups Links
                > > > >
                > > > >
                > > > >
                > > >
                > >
                > >
                > >
                > > ------------------------------------
                > >
                > > Unsubscribing info is here:
                > > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
                > > Groups Links
                > >
                > >
                > >
                >
              • perl_beg
                Hi David, here is my piece of code. I got the first part working that you were helping me with originally much thanks. I tried to include the next part of the
                Message 7 of 15 , Apr 30, 2008
                  Hi David, here is my piece of code. I got the first part working
                  that you were helping me with originally much thanks.

                  I tried to include the next part of the code to capture the date in
                  the logfile. For example - "Tue Apr 20 2008" but when I compare what
                  is in the file ($datestr =~ @array) of course it's not working
                  properly. Any suggestions would be great.


                  my $datestr = UnixDate("today","%a %b %e %Y");


                  %abuser_cnt = ();

                  my $file="/var/log/app.log";

                  open (INFILE, "<$file") || die "Cannot open file";
                  while (<INFILE>) {
                  chomp;
                  if ( $_ =~ m/-j\s?[0-9]?/){
                  my @array = ($day, $mth, $daynum, $year) = (split(/
                  \s+/,$_))[0,1,2,4];
                  if ($datestr =~ @array ) {
                  my ($day, $mth, $daynum, $year, $user) = (split(/\s+/,$_))
                  [0,1,2,4,7];
                  $abuser_cnt{$day,$mth,$daynum,$year,$user}++;
                  }
                  }
                  }

                  @abusers = sort keys %abuser_cnt;

                  foreach $user (@abusers) {
                  print "$user\n";
                  }
                • david wright
                  Hello perl_beg, ... I think your looking for this: ($datestr =~ /@array/) additionally, some of the logic in your code can condensed. ... this doesn t make
                  Message 8 of 15 , May 2, 2008
                    Hello perl_beg,

                    > when I compare what is in the file ($datestr =~ @array)

                    I think your looking for this: ($datestr =~ /@array/)

                    additionally, some of the logic in your code can condensed.

                    > my @array = ($day, $mth, $daynum, $year) =
                    > (split(/
                    > \s+/,$_))[0,1,2,4];
                    > if ($datestr =~ @array ) {
                    > my ($day, $mth, $daynum, $year, $user) =
                    > (split(/\s+/,$_))
                    > [0,1,2,4,7];

                    this doesn't make sense to me. why not just split once?

                    > $abuser_cnt{$day,$mth,$daynum,$year,$user}++;

                    I'm not sure what you want to do here...

                    I believe you could refactor to somdthing along these lines:

                    while (<INFILE>) {
                    chomp;
                    if (m/-j\s?[0-9]?/){
                    my ($day, $mth, $daynum, $year, $user) = (split(/\s+/,$_))[0,1,2,4,7];
                    $abuser_cnt{$user}++ if /$datestr/;
                    }
                    }

                    foreach $user (sort keys %abuser_cnt) {
                    print "$user\n";
                    }


                    Best of luck,
                    +Dave


                    --- On Wed, 4/30/08, perl_beg <perl_beg@...> wrote:

                    > From: perl_beg <perl_beg@...>
                    > Subject: [PBML] Re: Use split
                    > To: perl-beginner@yahoogroups.com
                    > Date: Wednesday, April 30, 2008, 1:17 PM
                    > Hi David, here is my piece of code. I got the first part
                    > working
                    > that you were helping me with originally much thanks.
                    >
                    > I tried to include the next part of the code to capture the
                    > date in
                    > the logfile. For example - "Tue Apr 20 2008" but
                    > when I compare what
                    > is in the file ($datestr =~ @array) of course it's not
                    > working
                    > properly. Any suggestions would be great.
                    >
                    >
                    > my $datestr = UnixDate("today","%a %b %e
                    > %Y");
                    >
                    >
                    > %abuser_cnt = ();
                    >
                    > my $file="/var/log/app.log";
                    >
                    > open (INFILE, "<$file") || die "Cannot
                    > open file";
                    > while (<INFILE>) {
                    > chomp;
                    > if ( $_ =~ m/-j\s?[0-9]?/){
                    > my @array = ($day, $mth, $daynum, $year) =
                    > (split(/
                    > \s+/,$_))[0,1,2,4];
                    > if ($datestr =~ @array ) {
                    > my ($day, $mth, $daynum, $year, $user) =
                    > (split(/\s+/,$_))
                    > [0,1,2,4,7];
                    > $abuser_cnt{$day,$mth,$daynum,$year,$user}++;
                    > }
                    > }
                    > }
                    >
                    > @abusers = sort keys %abuser_cnt;
                    >
                    > foreach $user (@abusers) {
                    > print "$user\n";
                    > }
                    >
                    >
                    > ------------------------------------
                    >
                    > Unsubscribing info is here:
                    > http://help.yahoo.com/help/us/groups/groups-32.htmlYahoo!
                    > Groups Links
                    >
                    >
                    >
                  Your message has been successfully submitted and would be delivered to recipients shortly.