simplify the script, check field match to value in a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting simplify the script, check field match to value in a file
# 1  
Old 05-25-2010
simplify the script, check field match to value in a file

Hi Everyone,

Below is the script, i feel there should be more simple way to do the same output, my one works, but feel not nice. like using index i feel it is slow (image my file is very large), maybe awk can do one line code?
Please advice.

Code:
[root@tmp]# cat 1.txt
1 a
2 b
3 cc
4 d

[root@tmp]# cat 1.pl
#!/usr/bin/perl
use strict;
use warnings;

my $str="a,cc";

open(my $FA, "1.txt") or die "$!";
while(<$FA>) {
        my @tmp=split;
        chomp;
        if (index($str, $tmp[1]) ne -1) {
                print "@tmp\n";
        }
}

[root@tmp]# ./1.pl
1 a
3 cc
[root@tmp]#

Thanks
# 2  
Old 05-25-2010
If I understand you correctly, you only want the lines where the second field contains certain strings?
Code:
awk '$2~/a|cc/' 1.txt
perl -ane 'print if $F[1]=~/a|cc/' 1.txt

This User Gave Thanks to pludi For This Post:
# 3  
Old 05-25-2010
Code:
awk -v a="a" -v b="cc" '$2 ~ /c/|| /a/{print}' file


cheers,
Devaraj Takhellambam

Last edited by devtakh; 05-25-2010 at 04:09 AM.. Reason: code tag
This User Gave Thanks to devtakh For This Post:
# 4  
Old 05-25-2010
Quote:
Originally Posted by pludi
If I understand you correctly, you only want the lines where the second field contains certain strings?
Code:
awk '$2~/a|cc/' 1.txt
perl -ane 'print if $F[1]=~/a|cc/' 1.txt

learnt from you. Smilie
Thanks

---------- Post updated at 02:16 AM ---------- Previous update was at 02:05 AM ----------

Quote:
Originally Posted by pludi
If I understand you correctly, you only want the lines where the second field contains certain strings?
Code:
awk '$2~/a|cc/' 1.txt
perl -ane 'print if $F[1]=~/a|cc/' 1.txt

Hi Pludi,

I tried below, if i use the perl code put into one pl file, how to do that, because below shows error:

Code:
[root@tmp]# cat 1.pl
#!/usr/bin/perl
use strict;
use warnings;

print if $F[1]=~/a|cc/ "1.txt";

[root@tmp]# ./1.pl
String found where operator expected at ./1.pl line 5, near "/a|cc/ "1.txt""
        (Missing operator before  "1.txt"?)
Global symbol "@F" requires explicit package name at ./1.pl line 5.
syntax error at ./1.pl line 5, near "/a|cc/ "1.txt""
Execution of ./1.pl aborted due to compilation errors.

[root@tmp]# perl -ane 'print if $F[1]=~/a|cc/' 1.txt
1 a
3 cc

how to involve this perl -ane '......' 1.txt into the pl file.

Thanks

Last edited by jimmy_y; 05-25-2010 at 04:30 AM..
# 5  
Old 05-25-2010
Ah, I thought you were looking for a 1-liner. Complete, stand-alone script:
Code:
#!/usr/bin/perl

use strict;
use warnings;
use Carp;

open my $FH, '<', '1.txt' or croak "Can't open 1.txt: $!";
print grep { local @_ = split; $_[1] =~ /a|cc/ } <$FH>;
close $FH;

This User Gave Thanks to pludi For This Post:
# 6  
Old 05-25-2010
Quote:
Originally Posted by pludi
Ah, I thought you were looking for a 1-liner. Complete, stand-alone script:
Code:
#!/usr/bin/perl

use strict;
use warnings;
use Carp;

open my $FH, '<', '1.txt' or croak "Can't open 1.txt: $!";
print grep { local @_ = split; $_[1] =~ /a|cc/ } <$FH>;
close $FH;

Thanks.

by the way
Code:
#!/usr/bin/perl
use strict;
use warnings;

is the same as:
Code:
#!/usr/bin/perl -w
use strict;

(and why today i cannot see reward point icon anymore? to thanks those answers)
# 7  
Old 05-25-2010
Quote:
Originally Posted by jimmy_y
by the way
Code:
#!/usr/bin/perl
use strict;
use warnings;

is the same as:
Code:
#!/usr/bin/perl -w
use strict;

Yes, usually they are. But the second form will upset the Perl debugger should you ever need it, while the former won't. Also, in extreme cases the warnings pragma can be disabled for short blocks, while the switch can't (to the best of my knowledge).
Quote:
Originally Posted by jimmy_y
(and why today i cannot see reward point icon anymore? to thanks those answers)
See here
This User Gave Thanks to pludi For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to check field value from a file records

I need a script to check the records in a file , if any value match transfer the record in error.txt file. 1- If any of the any field value is NULL(nothing in this field) Record1|Record2|Record3|Record4|Record5|DATE1|DATE2 Example: 11111111|22222222|NULL|12|444|27042018|27042018... (8 Replies)
Discussion started by: vivekn
8 Replies

2. Shell Programming and Scripting

Perl to update field in file based of match to another file

In the perl below I am trying to set/update the value of $14 (last field) in file2, using the matching NM_ in $12 or $9 in file2 with the NM_ in $2 of file1. The lengths of $9 and $12 can be variable but what is consistent is the start pattern will always be NM_ and the end pattern is always ;... (4 Replies)
Discussion started by: cmccabe
4 Replies

3. Shell Programming and Scripting

Get output of multiple pattern match from first field to a file

Hi All, Greetings! I have a file of 40000+ lines with different entries, I need matching entries filterd out to their files based on first filed pattern for the matching : For example: All server1 entries (in field1) to come together with its path in 2nd field. The best output I want... (9 Replies)
Discussion started by: rveri
9 Replies

4. Shell Programming and Scripting

awk to update field in file based of match in another

I am trying to use awk to match two files that are tab-delimited. When a match is found between file1 $1 and file2 $4, $4 in file2 is updated using the $2 value in file1. If no match is found then the next line is processed. Thank you :). file1 uc001bwr.3 ADC uc001bws.3 ADC... (4 Replies)
Discussion started by: cmccabe
4 Replies

5. Shell Programming and Scripting

awk to match field between two files and use conditions on match

I am trying to look for $2 of file1 (skipping the header) in $2 of file2 (skipping the header) and if they match and the value in $10 is > 30 and $11 is > 49, then print the line from file1 to a output file. If no match is foung the line is not printed. Both the input and output are tab-delimited.... (3 Replies)
Discussion started by: cmccabe
3 Replies

6. Shell Programming and Scripting

awk to update field file based on match

If $1 in file1 matches $2 in file2. Then the value in $2 of file2 is updated to $1"."$2 of file2. The awk seems to only match the two files but not update. Thank you :). awk awk 'NR==FNR{A ; next} $1 in A { $2 = a }1' file1 file2 file1 name version NM_000593 5 NM_001257406... (3 Replies)
Discussion started by: cmccabe
3 Replies

7. Shell Programming and Scripting

Command/script to match a field and print the next field of each line in a file.

Hello, I have a text file in the below format: Source Destination State Lag Status CQA02W2K12pl:D:\CAQA ... (10 Replies)
Discussion started by: pocodot
10 Replies

8. UNIX for Dummies Questions & Answers

Help with AWK - Compare a field in a file to lookup file and substitute if only a match

I have the below 2 files: 1) Third field from file1.txt should be compared to the first field of lookup.txt. 2) If match found then third field, file1.txt should be substituted with the second field from lookup.txt. 3)Else just print the line from file1.txt. File1.txt:... (4 Replies)
Discussion started by: venalla_shine
4 Replies

9. Shell Programming and Scripting

AWK: Pattern match between 2 files, then compare a field in file1 as > or < field in file2

First, thanks for the help in previous posts... couldn't have gotten where I am now without it! So here is what I have, I use AWK to match $1 and $2 as 1 string in file1 to $1 and $2 as 1 string in file2. Now I'm wondering if I can extend this AWK command to incorporate the following: If $1... (4 Replies)
Discussion started by: right_coaster
4 Replies

10. Shell Programming and Scripting

Script to Match first field of two Files and print

Hi, I want to get script or command in Sun Unix which matches first fields of both the files and print the feilds of one files, example may make it more clear. InputFile1 ================== Alex,1,fgh Menthos,45454,toto Gothica,855,ee Zenie4,77,gg Salvatore,66,oo Dhin,1234,papapa... (3 Replies)
Discussion started by: indian.ace
3 Replies
Login or Register to Ask a Question