Visit Our UNIX and Linux User Community


perl sort array by field


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl sort array by field
# 1  
Old 05-14-2010
perl sort array by field

Hi Everyone,

Any simple code can simplify the code below, please advice. Thanks

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

my @aaaaa = <DATA>;

        my @uids;
        foreach (@aaaaa) {
                my @ccccc = split (",", $_);
                push @uids, $ccccc[2];
        }

        sub by_uids {
                $uids[$a] <=> $uids[$b];
        }
        print @aaaaa[sort (by_uids (0..$#aaaaa))];

__DATA__
1,test,34
1,test2,65
2,test,35,
1,test3,34
2,test,34

[root@]# ./2.pl
1,test,34
1,test3,34
2,test,34
2,test,35,
1,test2,65
[root@]#

# 2  
Old 05-14-2010
Assuming that you need it sorted numerically by the 3rd field (since you didn't say what exactly you need)
Code:
$ cat bla.pl
#!/usr/bin/perl
use warnings;
use strict;

print sort { my @a = split /,/, $a; my @b = split /,/, $b; $a[2] <=> $b[2]; }
  <DATA>;

__DATA__
1,test,34
1,test2,65
2,test,35,
1,test3,34
2,test,34
$ perl bla.pl
1,test,34
1,test3,34
2,test,34
2,test,35,
1,test2,65

# 3  
Old 05-14-2010
Code:
#!/usr/bin/perl
use warnings;
use strict;

print sort {(split /,/, $a)[2] <=> (split /,/, $b)[2] } (<DATA>);


__DATA__
1,test,34
1,test2,65
2,test,35,
1,test3,34
2,test,34

Code:
cat:$perl ~/2.pl
1,test,34
1,test3,34
2,test,34
2,test,35,
1,test2,65

# 4  
Old 05-14-2010
Quote:
Originally Posted by pludi
Assuming that you need it sorted numerically by the 3rd field (since you didn't say what exactly you need)
Code:
$ cat bla.pl
#!/usr/bin/perl
use warnings;
use strict;

print sort { my @a = split /,/, $a; my @b = split /,/, $b; $a[2] <=> $b[2]; }
  <DATA>;

__DATA__
1,test,34
1,test2,65
2,test,35,
1,test3,34
2,test,34
$ perl bla.pl
1,test,34
1,test3,34
2,test,34
2,test,35,
1,test2,65

Thanks Smilie

Previous Thread | Next Thread
Test Your Knowledge in Computers #960
Difficulty: Medium
The WannaCry ransomware attack was a May 2017 worldwide cyberattack by the WannaCry ransomware cryptoworm, which targeted computers running Windows by encrypting data and demanding ransom payments in the Bitcoin.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Sort array elements from same field

Hi, input: line1|error_type_a@15 line1|error_type_c@10 line1|error_type_b@5 line2|error_type_f@3 line2|error_type_a@1 I would need to place all the second fields with common first field on the same line, BUT with sorted error position number: line1|error_type_b@5; error_type_c@10;... (5 Replies)
Discussion started by: beca123456
5 Replies

2. Shell Programming and Scripting

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. my $current_value=12345; my @users=("bob","ben","tom","harry"); open DBLIST,"<","/var/tmp/DBinfo"; my @input = <DBLIST>; foreach (@users) { my... (11 Replies)
Discussion started by: chidori
11 Replies

3. Shell Programming and Scripting

PERL : Sort substring occurrences in array of strings

Hi, My developer is on vacation and I am not sure if there is something which is easier for this. I have an array of strings. Each string in the array has "%" characters in it. I have to get the string(s) which have the least number of "%" in them. I know how I can get occurrences : ... (7 Replies)
Discussion started by: sinpeak
7 Replies

4. Shell Programming and Scripting

Perl script to sort data on second numeric field

Hi, I'm a learner of PERL programming. I've a input file with the below data: SWAT_5, 1703, 2010-09-21 SWAT_6, 2345, 2010-09-21 SWAT_7, 1792, 2010-09-21 SWAT_8, 1662, 2010-09-21 SWAT_9, 1888, 2010-09-21 VXHARP_1, 171, 2010-09-21 I need to sort this data based on the second... (6 Replies)
Discussion started by: ganapati
6 Replies

5. Shell Programming and Scripting

perl sum 2nd field in an array

Hi Everyone, ($total+=$_) for @record; assume @record=(1,2,3), so the result is 6. if @record=("1 3","2 3","3 3"), would like to sum up the 2nd field of this array, the result is 9. i tried " ($total+=$) for @record ", cannot, please advice. Thanks ---------- Post updated at 03:45... (1 Reply)
Discussion started by: jimmy_y
1 Replies

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

7. UNIX for Dummies Questions & Answers

Sort after 2. column in array in Perl

Hey How do I sort an array numerically after the second column? My values are integers like 1, 2, 3, 4... and they are not unique, so I can't just reverse my hash and sort by keys. I wanna sort my file/array so that I get the lines with the highest value in the top - that is descending. ... (2 Replies)
Discussion started by: Banni
2 Replies

8. Shell Programming and Scripting

Perl sort unique by one field only

Hi all, I've searched the forum and I can find some code to sort uniquely in perl but not by a single field. I have a file with data such as the following: 1,test,34 1,test2,65 2,test,35, 1,test3,34 2,test,34 What i want to do is sort it uniqely by the first field only so I'd end... (2 Replies)
Discussion started by: Donkey25
2 Replies

9. Shell Programming and Scripting

Perl - if conditions is meet, push the last field of $_ into an array

I am using a seed file shown below to separate cisco devices by ios/os type. I want to bunch all the devices based on ios/os version. Once I find a match, I only want to push the ip address into the appropriate array. Example of seedfile 8 host1 (C3500XL-C3H2S-M) 11.0(5)WC17 10.1.44.21 9... (1 Reply)
Discussion started by: popeye
1 Replies

10. Shell Programming and Scripting

sort() array of strings in perl

I have a perl script with an array of clients. @arr = ("The ABC Corp", "AA Corp.", "BB Corp"); If I run @a = sort (@arr); I will get @a = ("AA Corp", "BB Corp", "The ABC Corp"); but I want @a = ("AA Corp, "The ABC Corp", "BB Corp"); How do I sort array without changing... (2 Replies)
Discussion started by: photon
2 Replies

Featured Tech Videos