Sponsored Content
Full Discussion: perl sort array by field
Top Forums Shell Programming and Scripting perl sort array by field Post 302421373 by pludi on Friday 14th of May 2010 07:53:04 AM
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

 

10 More Discussions You Might Find Interesting

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

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

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

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

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

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

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

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

10. 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
Test::Class::Load(3pm)					User Contributed Perl Documentation				    Test::Class::Load(3pm)

NAME
Test::Class::Load - Load "Test::Class" classes automatically. VERSION
Version 0.02 SYNOPSIS
use Test::Class::Load qw(t/tests t/lib); Test::Class->runtests; EXPORT
None. DESCRIPTION
"Test::Class" typically uses a helper script to load the test classes. It often looks something like this: #!/usr/bin/perl -T use strict; use warnings; use lib 't/tests'; use MyTest::Foo; use MyTest::Foo::Bar; use MyTest::Foo::Baz; Test::Class->runtests; This causes a problem, though. When you're writing a test class, it's easy to forget to add it to the helper script. Then you run your huge test suite and see that all tests pass, even though you don't notice that it didn't run your new test class. Or you delete a test class and you forget to remove it from the helper script. "Test::Class::Load" automatically finds and loads your test classes for you. There is no longer a need to list them individually. BASIC USAGE
Using "Test::Class::Load" is as simple as this: #!/usr/bin/perl -T use strict; use warnings; use Test::Class::Load 't/tests'; Test::Class->runtests; That will search through all files in the "t/tests" directory and automatically load anything which ends in ".pm". You should only put test classes in those directories. If you have test classes in more than one directory, that's OK. Just list all of them in the import list. use Test::Class::Load qw< t/customer t/order t/inventory >; Test::Class->runtests; ADVANCED USAGE
Here's some examples of advanced usage of "Test::Class::Load". FILTER LOADED CLASSES You can redefine the filtering criteria, that is, decide what classes are picked up and what others are not. You do this simply by subclassing "Test::Class::Load" overriding the "is_test_class()" method. You might want to do this to only load modules which inherit from "Test::Class", or anything else for that matter. is_test_class $is_test_class = $class->is_test_class( $file, $directory ) Returns true if $file in $directory should be considered a test class and be loaded by Test::Class::Load. The default filter simply returns true if $file ends with ".pm" For example: use strict; use warnings; package My::Loader; use base qw( Test::Class::Load ); # Overriding this selects what test classes # are considered by T::C::Load sub is_test_class { my ( $class, $file, $dir ) = @_; # return unless it's a .pm (the default) return unless $class->SUPER:is_test_class( $file, $dir ); # and only allow .pm files with "Good" in their filename return $file =~ m{Good}; } 1; CUSTOMIZING TEST RUNS One problem with this style of testing is that you run all of the tests every time you need to test something. If you want to run only one test class, it's problematic. The easy way to do this is to change your helper script by deleting the "runtests" call: #!/usr/bin/perl -T use strict; use warnings; use Test::Class::Load 't/tests'; Then, just make sure that all of your test classes inherit from your own base class which runs the tests for you. It might looks something like this: package My::Test::Class; use strict; use warnings; use base 'Test::Class'; INIT { Test::Class->runtests } # here's the magic! 1; Then you can run an individual test class by using the "prove" utility, tell it the directory of the test classes and the name of the test package you wish to run: prove -lv -It/tests Some::Test::Class You can even automate this by binding it to a key in "vim": noremap ,t :!prove -lv -It/tests %<CR> Then you can just type ",t" ('comma', 'tee') and it will run the tests for your test class or the tests for your test script (if you're using a traditional "Test::More" style script). Of course, you can still run your helper script with "prove", "make test" or "./Build test" to run all of your test classes. If you do that, you'll have to make sure that the "-I" switches point to your test class directories. SECURITY
"Test::Class::Load" is taint safe. Because we're reading the class names from the directory structure, they're marked as tainted when running under taint mode. We use the following ultra-paranoid bit of code to untaint them. Please file a bug report if this is too restrictive. my ($package) = $_package =~ /^([[:word:]]+(?:::[[:word:]]+)*)$/; AUTHOR
Curtis "Ovid" Poe, "<ovid@cpan.org>" BUGS
Please report any bugs or feature requests to "bug-test-class-load@rt.cpan.org", or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Class-Load <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Class-Load>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. ACKNOWLEDGMENTS
Thanks to David Wheeler for the idea and Adrian Howard for "Test::Class". COPYRIGHT &; LICENSE Copyright 2006 Curtis "Ovid" Poe, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.14.2 2012-06-27 Test::Class::Load(3pm)
All times are GMT -4. The time now is 08:40 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy