Solved

system command output to array

Posted on 2004-04-30
20
6,447 Views
Last Modified: 2007-12-19
I would like to output the system command to an array.
below doesn't work, jinfo=0.


@jinfo=system("echo hello");
0
Comment
Question by:matgold
20 Comments
 
LVL 7

Expert Comment

by:fim32
Comment Utility
the system output usually ends up as a big string with line breaks included.  to put that to an array, just split it:

@jinfo=split "\n",`echo hello`;
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
You don't need the split.
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
perldoc -q "Why can't I get the output of a command with system()?"
Found in /Library/Perl/pods/perlfaq8.pod
       Why can't I get the output of a command with system()?

               You're confusing the purpose of system() and backticks (``).
               system() runs a command and returns exit status information (as
               a 16 bit value: the low 7 bits are the signal the process died
               from, if any, and the high 8 bits are the actual exit value).
               Backticks (``) run a command and return what it sent to STDOUT.

                   $exit_status   = system("mail-users");
                   $output_string = `ls`;
0
 

Author Comment

by:matgold
Comment Utility
open(filein, "jobs.lis");
@fileinput = <filein>;
close(filein);
foreach $file (@fileinput) {
  $jinfo=`command $file`;
  $jout=`grep -i prefix $jinfo`;
}

the grep is not working.
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
What is in $jinfo?
0
 
LVL 48

Expert Comment

by:Tintin
Comment Utility
What does

command $file

return?
0
 

Author Comment

by:matgold
Comment Utility
$file = fid_hec
$jinfo =
insert_job: fidp_hec   job_type: c
machine: hostname
owner: user@host
permission: gx,wx,mx
date_conditions: 1
days_of_week: mo
start_times: "08:26"
description: "Prod hec"
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
That's a strange thing to pass to grep
What did you want grep to do with it?
Did you mean to say `grep -i prefix $file`?
0
 

Author Comment

by:matgold
Comment Utility
No !
$file = fid_hec, then I run a program against $file, to produce output to $jinfo.
since $jinfo have unwanted data, that's why I used grep.
I actually wanted to do "egrep -i insert|machine|date_con|days_of_week"

the final output that I'm looking for, should look like so (comma delimited).
fidp_hec,hostname,1,mo,Prod hec
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
#Now it sounds like you want something like
  $jout = join'',grep/insert|machine|date_con|days_of_week/i,`command $file`;
 
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:matgold
Comment Utility
great I'm half way there.
I'm planning on do the following.
$jname = join'',grep/insert/i,`autorep -q -J $file`;
$jmach = join'',grep/machine/i,`autorep -q -J $file`;
$jdate = join'',grep/date_conditions/i,`autorep -q -J $file`;
$jdow = join'',grep/days_of_week/i,`autorep -q -J $file`;

results:
$jname = "insert_job: fidp_hec   job_type: c "
$jmach = "machine: hostname"
$jdate = "date_conditions: 1"
$jdow = "days_of_week: all"

I know in unix, you can print by field number, like print $2.
I can't remember how it work in perl.
for example, on $jname, I want to print just "fidp_hec".
0
 
LVL 84

Accepted Solution

by:
ozo earned 25 total points
Comment Utility
@jout = `autorep -q -J $file`;
$jname = (split/\s+/,join'',grep/insert/i,@jout)[1];
$jmach = join'',grep/machine/i,@jout;
$jdate = join'',grep/date_conditions/i,@jout;
$jdow = join'',grep/days_of_week/i,@jout;
0
 

Author Comment

by:matgold
Comment Utility
thanks
0
 

Author Comment

by:matgold
Comment Utility
one more thing,
where it says "[1]", if needed, can it be [1..10]
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
$jname = join' ',(split/\s+/,join'',grep/insert/i,@jout)[1..10];
0
 

Author Comment

by:matgold
Comment Utility
cool, thanks
0
 

Author Comment

by:matgold
Comment Utility
some where in @jout contain "-----", I would like to substitute it with "none none"
what can I do.

$jname = (split/\s+/,join'',s/-----*/none none/,grep/insert/i,@jout)[3];
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
$jname = (split/\s+/,join'',grep/insert/i,@jout)[3] =~ s/-----*/none none/;
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
Is this what you want?

 ($jname = (split/\s+/,join'',grep/insert/i,@jout)[3])=~ s/-----*/none none/;
0
 

Author Comment

by:matgold
Comment Utility
yes, thank you
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Input from stdin for perl 6 108
PERL get the value for query 4 139
Perl output collect 7 64
Perl File::Find alternative 1 23
I have been pestered over the years to produce and distribute regular data extracts, and often the request have explicitly requested the data be emailed as an Excel attachement; specifically Excel, as it appears: CSV files confuse (no Red or Green h…
A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now