How can I extract job_name and host_name from a text file?

I have a text file that contain info about each job. I need to extract job_name and host_name.
The format is as follow. as you can see, each job is seperated by /* ----------------- JOB_NAME ----------------- */

I need to extract "JOB_NAME" and host: yahoo
the output should be like so.
JOB_NAME, host: yahoo
JOB_NAME, host: yahoo
JOB_NAME, host: yahoo
JOB_NAME, host: yahoo


/* ----------------- JOB_NAME ----------------- */
blah
blah
host: yahoo
blah
blah

/* ----------------- JOB_NAME ----------------- */
blah
blah
host: yahoo
blah
blah
matgoldAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
Adam314Connect With a Mentor Commented:

#!/usr/bin/perl
use strict;
my %hosts;
while(<>) {
        next unless /^host:\s*(.*)/;
        $hosts{$1}++;
}
 
foreach (sort {$hosts{$a} <=> $hosts{$b}} keys %hosts) {
    print "$_: $hosts{$_}\n";
}

Open in new window

0
 
Adam314Commented:
Put this in a file, pass it the name of the text file.  eg:
    script.pl your_text_file.txt

#!/usr/bin/perl
use strict;
my $job;
while(<>) {
	$job=$1 if m|/\*\s*\-+\s+(\S+)|;
	print "$job, host: $1\n" if /host:\s*(.*)/;
}

Open in new window

0
 
matgoldAuthor Commented:
are you sure about the matching, I'm not getting anything
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
matgoldAuthor Commented:
Adam,

Can we do this instead. I'm going to extract the first five characters.
if it equal "host:" then 1 to rec-cnt.
but I need to be able to add up a total for each type of machine.
How can I do that.
0
 
Adam314Commented:
When I run the posted script on the data you gave, i get this exact output:
JOB_NAME, host: yahoo
JOB_NAME, host: yahoo


If your real data looks different, post your real data (if necessary, replace confidential data with similar data - numbers with numbers, letters with letters...).


To check if the first five characters are "host:", you could do  /^host:/.  Add i at the end to ignore case  /^host:/i.

>>if it equal "host:" then 1 to rec-cnt.
>>but I need to be able to add up a total for each type of machine.
Not sure what you mean by this.  Where do you get the type of machine?
0
 
matgoldAuthor Commented:
I'm sorry, I meant host not machine.
its not always going to be yahoo, it could be anything.
since I don't know what's out there, is there a way total up for each type of host.
0
 
matgoldAuthor Commented:
perfect!
Thank You very much
0
 
matgoldAuthor Commented:
currently it is sorting by total count, how can I sort by host name.
0
 
Adam314Commented:
Change line 9 to:
    foreach (sort keys %hosts) {
0
 
matgoldAuthor Commented:
fantastic, thanks again
0
All Courses

From novice to tech pro — start learning today.