Perl next if @array (exclude a list of values)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl next if @array (exclude a list of values)
# 1  
Old 04-27-2016
Perl next if @array (exclude a list of values)

I'm trying to exlude a list of values with perl to process while reading in a file. Is there a way to use the
Code:
next if

with a list?

Example:

Code:
@array = qw(val1 val2 val3 val6);

while (<>) {
 next if $_ =~ @array;	# values I don't want to process here
 print;			# process the rest here
}

Thanks in advance!
# 2  
Old 04-27-2016
Any time you want to quickly check if something is in a list, use a hash...
Code:
%hash=(val1 => 1, val2 => 1,  val3 => 1,  val6 => 1, ); # hash with unwanted items as keys and values that evaluate as true
while (<>) {
 next if $hash{$_};	# values you don't want to process are skipped here
 print;			# process the rest here
}

These 2 Users Gave Thanks to Skrynesaver For This Post:
# 3  
Old 04-28-2016
Using grep
Code:
@arry = qw (val1 val2 val3 val3);
while (<>){
  $line=$_;
  next if (grep(/$line/,@arry));
  print ;
}

# 4  
Old 04-28-2016
Hi Pravin,

That will work however, while it will use less memory than a hash, it will use a lot more cycles. you are grepping through the (potentially large array) for every line of the file.

Where you have a static list you wish check against a hash is the preferred solution as you take advantage of the hashing to very quickly return the value.
These 2 Users Gave Thanks to Skrynesaver For This Post:
# 5  
Old 05-20-2016
Will this work with a range?

Code:
%hash=(val1 => 1, val2 => 1,  val3 => 1,  val6 => 1, ); # hash with unwanted items as keys and values that evaluate as true
while (<>) {
 print if (/$hash{$_}/ .. /END/);	
}

# 6  
Old 05-20-2016
Quote:
Originally Posted by timj123
Will this work with a range?

Code:
%hash=(val1 => 1, val2 => 1,  val3 => 1,  val6 => 1, ); # hash with unwanted items as keys and values that evaluate as true
while (<>) {
 print if (/$hash{$_}/ .. /END/);	
}

I am afraid it will not work, regardless of what you are trying to do.
$_ in the while loop will have a new line with it and it will never match any of the %hash keys.
$hash{$_} will evaluate to a 1 if exist and to undef if it doesn't, thus /1/ .. /END/ or /undef/ .. /END/, which makes a moot condition.

What is it that you are trying to do? The latest seems off from your original query.
Could you post input and desired output examples?
# 7  
Old 05-20-2016
Yes and Thanks.
I'm trying to remove sections of a file based on an input of values.

Here is a sample of the file I'm trying to "edit"
Code:
section /total/SMS-MT-FSM-DEL-REP045
country: IN
1280363645.979354_PFS_1_1887728354
begin:03
final:56
END

section /total/SMS-MO-FSM001
country: IR
1280105721.484103_PFM_1_1187616097
final:23
END

section /total/SMS-MT-FSM-DEL-REP095
country: IN
1280363645.729309_PFS_1_1084296392
final:43
END

section /total/SMS-MO-FSM001
country: IR
1280105721.484103_PFM_1_1187616097
final:23
END

section /total/SMS-MO-FSM095
country: MO
1280105721.461090_PFM_1_882824215
begin:12
final:89
END

With a list given to me as:
Code:
REP045
REP095

I want to remove the sections of the file related to a list given above.

Desired output:
Code:
section /total/SMS-MO-FSM001
country: IR
1280105721.484103_PFM_1_1187616097
final:23
END

section /total/SMS-MO-FSM095
country: MO
1280105721.461090_PFM_1_882824215
begin:12
final:89
END

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl : Assigning multile hash values to a single array

I know that @food = %fruit; Works. But how do I assign %fruit and %veggies to @food ? (2 Replies)
Discussion started by: popeye
2 Replies

2. Shell Programming and Scripting

Perl script to verify that a value is present in an array (list)

I have 2 files , i need compare both files field by field, and in the fourth field some value will be interchaged and some value will be **. ex: file1 john|0.0|4|**:25;JP:50;UY:25 file2 john|0.0|4|JP:50;**:25;UY:25 (4 Replies)
Discussion started by: veeruasu
4 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. Shell Programming and Scripting

How to map the values of an array in perl?

Hi, I have 2 arrays: @names=qw(amith veena chaitra); @files=qw(file.txt file1.txt file3.txt); There is one to one relationship between names and files. There needs to be mapping created between names and files. The output should be like this: amith --> file.txt veena --->... (3 Replies)
Discussion started by: vanitham
3 Replies

5. Shell Programming and Scripting

How to get list of user into an array in perl script

Hi, cut -d: -f1,3 /etc/group >rpt.out I have a doubt in perl. right i am getting list of group user id into rpt.out file. instead i need to store it as an array in perl script. could you please tell me how can i get list of user into an array in perl script.. thanks in advance. (1 Reply)
Discussion started by: solo123
1 Replies

6. Shell Programming and Scripting

Greping array values in Bash like Perl

Hi, Is there an easy way to simulate following Perl code in Bash. if ( grep {$my_value eq $_} @ARGV ){ print "Do Something\n"; } else { die "Invalid value"; } (0 Replies)
Discussion started by: paragkalra
0 Replies

7. Shell Programming and Scripting

comparing list values in Perl

Hi, I have tab separated list: KB0005 1019 T IFVATVPVI 0.691 PKC YES KB0005 1036 T YFLQTSQQL 0.785 PKC YES KB0005 1037 S FLQTSQQLK 0.585 DNAPK YES KB0005 508 S ENIISGVSY 0.507 cdc2 YES KB0005 511 S ... (1 Reply)
Discussion started by: karla
1 Replies

8. Shell Programming and Scripting

perl -write values in a file to @array in perl

Hi can anyone suggest me how to write a file containing values,... say 19 20 21 22 .. 40 to an array @array = (19, 20, ... 40) -- Thanks (27 Replies)
Discussion started by: meghana
27 Replies

9. Shell Programming and Scripting

storing values in a list or array

i have a file called file.txt having the following entries. 2321 2311 2313 4213 i wnat to store these values in a list and i want to iterate the list using loop and store it in another list (1 Reply)
Discussion started by: KiranKumarKarre
1 Replies

10. Shell Programming and Scripting

perl: Assigning array values..

I have to add a variable value to an array, something like this: ...... @my_array_name = $value_of_this_variable; This doesnt seem to work, any ideas why? Thanks! (4 Replies)
Discussion started by: looza
4 Replies
Login or Register to Ask a Question