Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: grep in line and print

by Athanasius (Abbot)
on Jan 24, 2013 at 02:31 UTC ( #1015066=note: print w/ replies, xml ) Need Help??


in reply to grep in line and print

Hello justbow, and welcome to the Monastery!

Perhaps this is what you’re looking for:

#! perl use strict; use warnings; while (my $line = <DATA>) { if ($line =~ /C4:46:19:75:C1:55/) { print "ID = ", (split /\s+/, $line)[0], "\n"; } } __DATA__ SS-ID VLAN MAC TIME IP RSSI MODE UAPSD BW GI WMOS DHCP IDENTITY ----- ---- --- ---- -- ---- ---- ----- -- -- ---- ---- -------- 1-1 0 C4:46:19:75:C1:55 23m 192.168.5.253 -24 bgn no 20 S 4.9 ack* 1-2 0 5C:57:C8:69:8C:1E 3s 192.168.5.254 -38 bg no 20 L 4.8 ack*

Output:

12:28 >perl 495_SoPW.pl ID = 1-1 12:28 >

Update: The following is probably clearer:

#! perl use strict; use warnings; while (my $line = <DATA>) { chomp $line; my @recs = split /\s+/, $line; if ($recs[2] eq 'C4:46:19:75:C1:55') { print "ID = ", $recs[0], "\n"; } } __DATA__ SS-ID VLAN MAC TIME IP RSSI MODE UAPSD BW GI WMOS DHCP IDENTITY ----- ---- --- ---- -- ---- ---- ----- -- -- ---- ---- -------- 1-1 0 C4:46:19:75:C1:55 23m 192.168.5.253 -24 bgn no 20 S 4.9 ack* 1-2 0 5C:57:C8:69:8C:1E 3s 192.168.5.254 -38 bg no 20 L 4.8 ack*

(Same output.)

See split.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


Comment on Re: grep in line and print
Select or Download Code
Replies are listed 'Best First'.
Re^2: grep in line and print
by justbow (Initiate) on Jan 24, 2013 at 04:41 UTC
    Hello Athanasius, Thanks for the suggestion, But im still getting the error :D I'm trying the code :
    #! perl use strict; use warnings; $allmac = "~/temp/allmac.txt"; print $allmac; while (my $line = $allmac) { if ($line =~ /C4:46:19:75:C1:55/) { $id = (split /\s+/, $line)[0]; print "ID = $id\n"; } }
    And getting error :
    Global symbol "$allmac" requires explicit package name at ./filtermac. +pl line 5. Global symbol "$allmac" requires explicit package name at ./filtermac. +pl line 6. Global symbol "$allmac" requires explicit package name at ./filtermac. +pl line 7. Global symbol "$id" requires explicit package name at ./filtermac.pl l +ine 11. Global symbol "$id" requires explicit package name at ./filtermac.pl l +ine 12. Execution of ./filtermac.pl aborted due to compilation errors.

      With use strict in effect, you need to declare your variable names:

      my $allmac = ... ... my $id = ...

      But the line:

      while (my $line = $allmac)

      won’t work: it’s assigning the file name to $line, but it needs to call readline on a file handle, like so:

      open (my $fh, '<', $allmac) or die "Can't open file '$allmac' for read +ing: $!"; while (my $line = <$fh>) { ....

      Applying the diamond operator to a filehandle: <$fh> is the standard way to call readline in Perl. See readline and I/O Operators; also open and perlopentut.

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1015066]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (9)
As of 2015-07-31 11:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (276 votes), past polls