Perl help in deleting array that contains 0


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl help in deleting array that contains 0
# 1  
Old 07-26-2011
Perl help in deleting array that contains 0

Hi,

I have map co-ordinates GDF data like the below:
Code:
{123, 2, 244}, {233, 0, 432}, {0, 233, 24}, {353, 21, 0}, {22, 756, 92}, {281, 0, 211}, {211, 645, 22}, {310, 23, 0}

I need to use perl script to store these values into an array and delete from the array whose indices having value 0 anywhere

So, finally I need to get the result as:
Code:
{123, 2, 244}, {22, 756, 92}, {211, 645, 22}

I am a newbie to Perl. How to store array of arrays in Perl?

I have come across that to erase an array element we can use splice and delete and for pattern matching, we can use "=~" operator. Please help me in writing this script.
# 2  
Old 07-26-2011
Code:
% perl -F'/(?<=}),\s/' -alne 'print join ", ", grep {!/\b0\b/} @F' INPUTFILE
{123, 2, 244}, {22, 756, 92}, {211, 645, 22}

These 2 Users Gave Thanks to yazu For This Post:
# 3  
Old 07-27-2011
Quote:
Originally Posted by yazu
Code:
% perl -F'/(?<=}),\s/' -alne 'print join ", ", grep {!/\b0\b/} @F' INPUTFILE
{123, 2, 244}, {22, 756, 92}, {211, 645, 22}

Wow!! amazing... cute one-liner.

If possible could you please explain it?
# 4  
Old 07-27-2011
Ok, I'll try but my English is not good at all.

Perl switches (perldoc perlrun):
"-n" reads lines from @ARGV (that is INPUTFILE) to $_ and "-l" removes and adds (when printing) newline chars. "-a" splits $_ to @F array according to a regex from "-F" option

"grep {! RE} @F" filters all elements from the array (elements are strings - "{123, 0, 111}" and so on) where it's not true that 0 is a "word" (not in any numbers like 10, 101, etc.).

Then we join the ready list to a string with ", " as the separator and print it.

Last edited by yazu; 07-27-2011 at 01:33 AM..
This User Gave Thanks to yazu For This Post:
# 5  
Old 07-27-2011
Quote:
Originally Posted by yazu
Ok, I'll try but my English is not good at all.

Perl switches (perldoc perlrun):
"-n" reads lines from @ARGV (that is INPUTFILE) to $_ and "-l" removes and adds (when printing) newline chars. "-a" splits $_ to @F array according to a regex from "-F" option

"grep {! RE} @F" filters all elements from the array (elements are strings - "{123, 0, 111}" and so on) where it's not true that 0 is a "word" (not in any numbers like 10, 101, etc.).

Then we join the ready list to a string with ", " as the separator and print it.
Thanks yazu a ton, in shedding light on this !!

But still this RE is obscure Smilie
Code:
(?<=}),\s

And, what this "(?={)" would mean?

Last edited by royalibrahim; 07-27-2011 at 03:45 AM..
# 6  
Old 07-27-2011
We can't use spaces in -F on the command line - so \s.
If we use ',\s' as the separator - it will split to "{120", "123}" and so on.
If we use '},\s' as the separator we lose "}" in array elements.

There is a lookbehind possibility in perl: /(?<=XXX)YYY/ It means we use YYY as RE but only if before YYY there is XXX. It's just like XXXYYY but XXX does not count for use RE for splitting or substitution or matching (for memory variables like $&, etc.). In perl there are lookahead (?=XXX) and negative lookbehind(lookahead) capabilities also.
# 7  
Old 07-27-2011
Code:
 perl -nle '$,=",";print /\{[^0]*\}/g' filename

These 2 Users Gave Thanks to pravin27 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

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

2. Shell Programming and Scripting

PERL : Read an array and write to another array with intial string pattern checks

I have an array and two variables as below, I need to check if $datevar is present in $filename. If so, i need to replace $filename with the values in the array. I need the output inside an ARRAY How can this be done. Any help will be appreciated. Thanks in advance. (2 Replies)
Discussion started by: irudayaraj
2 Replies

3. Shell Programming and Scripting

Array in Perl - Detect several file to be in one array

Hi everyone I have one question about using array in perl. let say I have several log file in one folder.. example test1.log test2.log test3.log and the list goes on.. how to make an array for this file? It suppose to detect log file in the current directory and all the log file will... (3 Replies)
Discussion started by: sayachop
3 Replies

4. Shell Programming and Scripting

Deleting characters with sed,perl,awk

Input: :: gstreamer :: xine-lib :: xine-lib-extras Output should be: gstreamer xine-lib xine-lib-extras How can it be done with sed or perl? (12 Replies)
Discussion started by: cola
12 Replies

5. Shell Programming and Scripting

perl, put one array into many array when field is equal to sth

Hi Everyone, #!/usr/bin/perl use strict; use warnings; my @test=("a;b;qqq;c;d","a;b;ggg;c;d","a;b;qqq;c;d"); would like to split the @test array into two array: @test1=(("a;b;qqq;c;d","a;b;qqq;c;d"); and @test2=("a;b;ggg;c;d"); means search for 3rd filed. Thanks find the... (0 Replies)
Discussion started by: jimmy_y
0 Replies

6. Shell Programming and Scripting

Perl grep array against array

Hi, Is there any way I can grep an array against another array? Basically here's what I need to do. There will be an array containing some fixed texts and I have to check whether some files contain these lines. Reading the same files over and over again for each different pattern doesnt seem... (1 Reply)
Discussion started by: King Nothing
1 Replies

7. 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

8. Shell Programming and Scripting

deleting certain parts of a line in perl

I have a filr data.txt. Its contents are Available labels (* indicates activated, I indicates installed, R idicates running): abc-3.0.3 def-3.0.4 xyz-3.1.2-1.0 I want to delete " Available labels (* indicates activated, I indicates installed, R idicates running):" and... (3 Replies)
Discussion started by: lassimanji
3 Replies

9. UNIX for Dummies Questions & Answers

Deleting Array Elements

Hi, I am writing a BASH shell script. I have an array that will contain IN ANY ORDER the following elements: DAY 8D MO NS. I would like to erase the element DAY, but since the order of the elements in the array are random, I will not know which element # DAY is (ie it's not as simple as... (3 Replies)
Discussion started by: msb65
3 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question