On Nov 21, 4:47 pm, rc...@pcug.org.au (Owen) wrote:
On Fri, 21 Nov 2008 03:41:21 -0500

"michael spellman" wrote:
On Thu, Nov 20, 2008 at 8:32 PM, Owen wrote:

On Thu, 20 Nov 2008 06:32:51 -0800 (PST)
marys wrote:
I am not altogether certain what you are trying to achieve.
Read up on $.  (See perldoc perlvar) That gives you the line number
that you are reading.
Also I think you night be better off using a regex.
if ($line =~ /xxxx/}{print "$. $line\n"};
This gives you the opportunity to get matches as well as pre and
post matches
If you want to do awk type things, have a read of perldoc English
Thank you for the advice.
I want to look in all lines in a many-line document, and if the line
contains a particular string, like maybe 'QQQ', I want to take the
next-to-last string from that line and assign a variable name $x to
A unix-like command to do the job on one line would be:
my $x = ` awk  '/QQQ/{ print $(NF-1) }'  `
Then if I had lines in the file like
QQQ   1 2 t horseradish 65
QQQ 24 65 18
rr  QQQ wowmom 18
I would get, after line#1    $x=horseradish
and after line #2   $x=65
and after line #3  $x=wowmom
One thing I might be able to do is to pull in one line at a time into
an array with the 'diamond operator' in the llama book and then
somehow split on whitespace at each value of that array, put the
resulting list into another array, and search this second array,
position by position, for 'QQQ'.  If any of the positions match, I
could get the second-last word on that line from ($#array -1) somehow.
But there are obvious problems here: for one thing, I need to
surround the values with a quote, for example I need $x='horseradish'
or else Perl will tell me it can't do the job.  Plus I am not sure
how to put the results of split into an array.  But I am sure that's
do-able.  It's a learning experience for sure.
Thank you very much for the help.
You need to run something like this. Adapt to your requirements

#!/usr/bin/perl -w

use strict;

while (<DATA>) {
my $line = $_;
if ( $line =~ /QQQ/ ) {
my @bits = split;
print "$bits[$#bits -1]\n";



QQQ   1 2 t horseradish 65
QQQ 24 65 18
rr  QQQ wowmom 18



============================================================- Hide quoted text -

- Show quoted text -

I guess I don't need awk for the job I described, only a lot of array
reading and manipulating. If I have an input file:

field1 xxxx
field3 3333
QQQQQQ 4444 hahaha

and I want to find all lines containing the string QQQQQQ and then
print out to a screen the last item on those lines, I've got to use
the approach Owen wrote about above, where I first split and then
successively test each field of each line to see if it matches, and if
so I follow with a print of the last field:

#!/usr/bin/perl -wT
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use strict;
use diagnostics;
my $q = new CGI;
print $q->header;
print $q->start_html(-title=>"myawk");

my @infile;
my $q = new CGI;
open (FILEIN, "/tmp/file.txt") or die "Can't open /tmp/file.txt for
reading: $!\n!";
open (FILEOUT, ">/tmp/out.txt") or die "Can't open /tmp/out.txt for
writing: $!\n!";
chmod 0755, '/tmp/out.txt' or warn "Cannot chmod '/tmp/out.txt': $!

chomp(my @linesarray = <FILEIN>);

my @splitline;
foreach (@linesarray){
@splitline=split; #array is a split-up line from the
input file

if ($splitline[0] eq 'QQQQQQ'){
my $lastfield = $splitline[$#splitline];
print $q->center($q->h3("\$lastfield is $lastfield

my $splitline=@splitline;

print $q->center($q->h2(" awk program is finished!\n"));

This gives a centered output at the browser:

$lastfield is 2222

$lastfield is hahaha
program is finished!

This was a good learning experience, and the job is done, but it was a
fairly simple task that took ~20 lines of code. I think there is a
Perl resource somewhere that does awk jobs with one or two commands.
Maybe a module.

I want to thank Owen and John for their advice and all the pointers on
syntax also.

Search Discussions

Discussion Posts


Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 7 of 7 | next ›
Discussion Overview
groupbeginners-cgi @
postedNov 20, '08 at 2:33p
activeNov 22, '08 at 3:13a

3 users in discussion

Marys: 3 posts John W. Krahn: 2 posts Owen: 2 posts



site design / logo © 2021 Grokbase