Perl - use search keywords from array and search a file and print 3rd field when matched


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl - use search keywords from array and search a file and print 3rd field when matched
# 1  
Old 12-13-2012
Perl - use search keywords from array and search a file and print 3rd field when matched

Hi ,

I have been trying to write a perl script to do this job. But i am not able to achieve the desired result. Below is my code.

Code:
my $current_value=12345;
my @users=("bob","ben","tom","harry");
open DBLIST,"<","/var/tmp/DBinfo";
my @input = <DBLIST>;

foreach (@users)
{
my $req_user_info=grep(/$_/,@input);
my ($user,$blah,$value)=split(/:/,$req_user_info);
my $diff=$current_value-$value;
print "$diff";
}}

Can some please help me understand what i am missing and how to edit this code to get the desired result.
# 2  
Old 12-13-2012
Hi

It would have been better had your provided a sample input file of yours. At hindsight, this is one issue:

Code:
foreach  my $x (@users)
{
my $req_user_info=grep(/$x/,@input);
my ($user,$blah,$value)=split(/:/,$req_user_info);
my $diff=$current_value-$value;
print "$diff";
}

Guru.
# 3  
Old 12-13-2012
@ Guru , i am using perl default variable $_ . Hence i have not used a separate variable in foreach loop.
# 4  
Old 12-13-2012
@chidori : Did you try the above solution? I understand you tried to use $_, but it should not be used when using grep. This is because grep internally uses $_ to process each element of the array.

Guru.
# 5  
Old 12-13-2012
i can see
Code:
my $req_user_info=grep(/$x/,@input);

the output of grep looks like "0" and "1" so the variable $req_user_info is holding numbers. but i would require something like search for the pattern and when match is found store that line in variable
# 6  
Old 12-13-2012
Hi
You should use it like this:

Code:
my ($req_user_info)=grep(/$x/,@input);

This is because grep returns a list, and when used in scalar context, you get the length.

Guru.
This User Gave Thanks to guruprasadpr For This Post:
# 7  
Old 12-13-2012
It worked!!!

Thanks Guru.. It worked Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Search a string inside a pattern matched block of a file

How to grep for searching a string within a begin and end pattern of a file. Sent from my Redmi 3S using Tapatalk (8 Replies)
Discussion started by: Baishali
8 Replies

2. UNIX for Dummies Questions & Answers

Search file and print everything except multiple search terms

I'm trying to find a way to search a range of similar words in a file. I tried using sed but can't get it right:sed 's/\(ca01\)*//'It only removes "ca01" but leaves the rest of the word. I still want the rest of the information on the lines just not these specific words listed below. Any... (3 Replies)
Discussion started by: seekryts15
3 Replies

3. UNIX for Advanced & Expert Users

Search and replace a array values in perl

Hi, i want to search and replace array values by using perl perl -pi -e "s/${d$i]}/${b$j]}" *.xml i am using while loop for the same. if i excute this,it shows "Substitution replacement not terminated at -e line 1.". please tell me what's wrong this line (1 Reply)
Discussion started by: arindam guha
1 Replies

4. UNIX and Linux Applications

Perl Script to read an excel file into an array and search in the UNIX directories

Hi, I want the Perl script with versions 5.8.2 and 5.8.5 starting with #!/usr/bin/perl The Perl program should read the excel file or text file line by line and taking into an array and search in the UNIX directories for reference file of .jsp or .js or .xsl with path .The Object names... (2 Replies)
Discussion started by: pasam
2 Replies

5. Shell Programming and Scripting

Better and efficient way to reverse search a file for first matched line number.

How to reverse search for a matched string in a file. Get line# of the first matched line. I am getting '2' into 'lineNum' variable. But it feels like I am using too many commands. Is there a better more efficiant way to do this on Unix? abc.log aaaaaaaaaaaaa bbbbbbbbbbbbb... (11 Replies)
Discussion started by: kchinnam
11 Replies

6. Shell Programming and Scripting

how to search array and print index in ksh

Hi, I am using KSH shell to do some programming. I want to search array and print index value of the array. Example.. nodeval4workflow="DESCRIPTION ="" ISENABLED ="YES" ISVALID ="YES" NAME="TESTVALIDATION" set -A strwfVar $nodeval4workflow strwfVar=DESCRIPTION=""... (1 Reply)
Discussion started by: tmalik79
1 Replies

7. Shell Programming and Scripting

Perl - search and replace a particular field

Hi, I have a file having around 30 records. Each record has 5 fields delimited by PIPE. Few records in the file having Junk characters in the field2 and field4. I found the junk charcter and I tested it and replace the junk with space with the command below perl -i -p -e "s/\x00/ /g"... (1 Reply)
Discussion started by: ramkrix
1 Replies

8. Shell Programming and Scripting

Search a file with keywords

Hi All I have a file of format asdf asf first sec endi asdk rt 123 ferf dfg ijglkp (7 Replies)
Discussion started by: mailabdulbari
7 Replies

9. Shell Programming and Scripting

search of string from an array in Perl

Hi All I want to search a string from an array in Perl. If a match occurs, assign that string to a variable else assign 'No match'. I tried writing the script as follows but it's in vain. Please help me.. #!/usr/bin/perl use strict; my $NER; my @text=("ORG","PER"); ... (4 Replies)
Discussion started by: my_Perl
4 Replies

10. Shell Programming and Scripting

perl regular expressions and field search

Hello guys/gals, i am sorry as this is probably very simply but i am slowly learning perl and need to convert some old korn shell scripts. I need to be able to search a file line by line but only match a string at particular location on that line, for example character 20-30. So my file... (4 Replies)
Discussion started by: dynamox
4 Replies
Login or Register to Ask a Question