question on perl script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting question on perl script
# 1  
Old 07-23-2008
question on perl script

LOGFILE
========
My name is: ?Anthony Perkins
I am an American citizen.
My name is: ?Donte Suarez
I am a Spanish citizen.
My name is: ? lenny Davis
I am an Australian citizen.
My name is: ?allen rigodeau
I am a French citizen.
My name is: ? manuel williams
I am a Mexican citizen.

OUTPUT
=======
First Name - ANTHONY
Last Name - PERKINS
First Name - DONTE
Last Name - SUAREZ
First Name - LENNY
Last Name - DAVIS
First Name - ALLEN
Last Name - RIGODEAU
First Name - MANUEL
Last Name - WILLIAMS

>>>>>>>>>>

SCRIPT
=======

if ( $currline =~ m/My name is\: \?/ )
{
@record = split(/\?/, $currline);
$message = "$record[1]";
@record2 = split(/ /, $message);
$firstname= "$record2[0]";
$lastname = "$record2[1]";
print OUTPUT "First Name -".$firstname;
print OUTPUT "Last Name -".$lastname;
}

>>>>>>>>>>

For the above logfile, my script would be working properly only on Anthony Perkins and allen rigodeau.
But this no longer works if there's a space after the question mark, or when there's more than one space between the first and last name.

Appreciate your advice.
Thanks.
# 2  
Old 07-23-2008
Check out split - perldoc.perl.org. You're splitting the array by spaces, which means if there's more than one space, your array's all off. Try this:

Code:
use Data::Dumper;

if ( $currline =~ m/My name is\: \?/ )
{
        @record = split(/\?/, $currline);
        $message = "$record[1]";
        @record2 = split(/ /, $message);
print Dumper(@record2);
        $firstname= "$record2[0]";
        $lastname = "$record2[1]";
        print OUTPUT "First Name -".$firstname;
        print OUTPUT "Last Name -".$lastname;
}

and you'll see the error.

Reading a bit more, and we can see that what we want is:

Code:
if ( $currline =~ m/My name is\: \?/ )
 {
         @record = split(/\?/, $currline);
         $message = "$record[1]";
         @record2 = split(' ', $message);
         $firstname= "$record2[0]";
         $lastname = "$record2[1]";
         print OUTPUT "First Name -".$firstname;
         print OUTPUT "Last Name -".$lastname;
 }

Alternately, try:
Code:
if ( $currline =~ m/My name is\: \?\s*(\S+)\s+(\S+)/ )
 {
         print OUTPUT "First Name -".$1;
         print OUTPUT "Last Name -".$2;
 }

# 3  
Old 07-25-2008
Code:
cat file | sed -n '/?/p' | sed 's/?/ /' | awk '{ print "First Nmae-"$(NF-1);print "Last Name-"$NF}'

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Programming

Not a repeated question (Perl Script Create Football Formation)

https://www.unix.com/programming/252468-perl-script-create-football-formation.html https://www.unix.com/members/43551.html, it is not repeated question. please read it before u block my question. Unblock it for me. Thanks:mad: (0 Replies)
Discussion started by: Tzeronone
0 Replies

3. Shell Programming and Scripting

Excuting perl script from within a perl script with variables.

Not sure what I am doing wrong here, but I can print the list with no issue. Just a blank screen with the 'do'. #!/usr/bin/perl open FILE, "upslist.txt"; while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; do 'check_snmp_mgeups-0.1.pl -H $1 -C $2'; } ... (1 Reply)
Discussion started by: mrlayance
1 Replies

4. Shell Programming and Scripting

Perl : embedding java script with cgi perl script

Hi All, I am aware that html tags can be embedded in cgi script as below.. In the same way is it possible to embed the below javascript in perl cgi script ?? print("<form action="action.htm" method="post" onSubmit="return submitForm(this.Submitbutton)">"); print("<input type = "text"... (1 Reply)
Discussion started by: scriptscript
1 Replies

5. Shell Programming and Scripting

executing perl script from another perl script : NOT WORKING

Hi Folks, I have 2 perl scripts and I need to execute 2nd perl script from the 1st perl script in WINDOWS. In the 1st perl script that I had, I am calling the 2nd script main.pl =========== print "This is my main script\n"; `perl C:\\Users\\sripathg\\Desktop\\scripts\\hi.pl`; ... (3 Replies)
Discussion started by: giridhar276
3 Replies

6. Shell Programming and Scripting

Perl script question

Hi, I have a unix machine that hosts 5 oracle databases. Each database has its own "ORACLE_HOME" with is actualy an oracle software . Each software is installed in its own directory. For example : /u01/app/oracle/product/11.2.0/TERP11gR2 /u01/app/oracle/product/11.2.0/QERP11gR2... (0 Replies)
Discussion started by: yoavbe
0 Replies

7. Shell Programming and Scripting

calling a perl script with arguments from a parent perl script

I am trying to run a perl script which needs input arguments from a parent perl script, but doesn't seem to work. Appreciate your help in this regard. From parent.pl $input1=123; $input2=abc; I tried calling it with system("/usr/bin/perl child.pl $input1 $input2"); and `perl... (1 Reply)
Discussion started by: grajp002
1 Replies

8. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

9. Shell Programming and Scripting

Perl Question on How to Design an Effective Script

Hello All, This is my situation and I am new to perl scripting so I am trying to figure out the best way to tackle this problem. I need help in creating the logic to analyze the data. Problem: I need to access an oracle database, gather information from a specific query and then analyze... (0 Replies)
Discussion started by: jacktravine
0 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question