Eri Mendz wrote: > hello everyone, > > since im learning perl, i might as well harness its power to solve my > small real-world problem. sample lines of my grep'ped ppp log goes > like this: > > Jan 12 05:47:50 localhost pppd[8696]: Connect time 2.2 minutes. > Jan 12 19:23:44 localhost pppd[9359]: Connect time 34.0 minutes. > [..] > Jan 17 14:12:06 localhost pppd[20127]: Connect time 12.6 minutes. > Jan 17 17:17:12 localhost pppd[20398]: Connect time 21.1 minutes. > [..] > Feb 3 17:59:42 localhost pppd[22888]: Connect time 4.4 minutes. > Feb 3 21:12:22 localhost pppd[23421]: Connect time 7.5 minutes. > ^^^^^ > i want to extract the time field on each line and get the sum total > each time i end my net session (sort of estimating my time online).
Sounds like a regex would be useful here. This /([\d.]+)\s+([a-z]+)\./i will check that the line in question is in the expected format and return the time value (a sequence of digits or a period) and the units name (a sequence of letters). > Have started my perl script like this: > > #!/usr/bin/perl -w > use strict; > > while (<>){ > my $string = $_; Here you throw away all of the convenience of functions defaulting to $_ as an implicit parameter. > my @string = split /\s+/, $string; > print "$string[7]\n"; Without using $string, these two lines could be written print (split)[7],"\n"; > } > exit; Not necessary if it's the last line of the source. > > this just prints the time field on each line until finish of loop. i > tried using += operator to get sum but i end up getting errors. how > do i > do this? i checked my script with perl's -c flag and it says syntax OK > but i get errors when i run the script in command line: At a guess your report has header lines which don't have a column 8. $string[7] would be 'undef' in this case. > Use of uninitialized value in concatenation (.) or string at > ./diamond-optr.pl line 15, <> line 20. Use of uninitialized value in > concatenation (.) or string at ./diamond-optr.pl line 15, <> line 21. > Use of uninitialized value in concatenation (.) or string at > ./diamond-optr.pl line 15, <> line 22. Same thing. > this is printed in first 3 lines before printing the individual time > fields. once i solve this problem i want the perl script to run each > time i go offline, so i reckon this should be fired in ppp init file > or something. this i dont know as well. kindly help. my home box > is mandrake 9 and using wvdial in console to go online. TIA. Can't help with wvdial, but how about this as a script: while (<>) { next unless /([\d.]+)\s+([a-z]+)\./i; die "Unexpected units field" unless $2 eq 'minutes'; my $time = $1; print $time."\n"; } HTH, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]