![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Sorting : | satyam_sat | Shell Programming and Scripting | 3 | 04-15-2008 01:30 PM |
| awk sorting | Jaken | Shell Programming and Scripting | 4 | 05-21-2006 10:54 AM |
| Sorting mp3 | penguin-friend | Shell Programming and Scripting | 3 | 05-13-2005 04:21 AM |
| Perl: sorting files by whats in'em | quantumechanix | Shell Programming and Scripting | 4 | 12-14-2003 12:44 AM |
| Perl: Sorting an associative array | tine | Shell Programming and Scripting | 2 | 10-29-2003 04:11 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
By parameters do you mean key fields. You cannot do that.
You need a subroutine: Code:
# sort using explicit subroutine name
sub sortsub {
$age{$a} <=> $age{$b}; # assumed number change this part for your needs
}
@sorted = sort sortsub @not_sorted;
|
|
|||||
|
a unix command would be
>sort rawfile -t'|' -k1.21,1.30 -r
Carl________15_X_Way____A004________LX Will________2_A_St______A003________LX Benny_______5_Spring____A002________LX Joe_________12_Main_St__A001________LX and that ordered my file reverse by what is in positions 21-30. I did this by: (a) specifying the 'tab' or key flag as the '|' which does not exist; thus all is considered field 1 (b) said to sort on k1.21,1.30 which translated to field one positions 21 to 30 (c) and the -r put in reverse order So in perl, I figure somehow I need to define that I want to use character positions 21-30 as the key field. Then give a command to sort on those positions. Perhaps this needs to be its own subroutine. I do not know. |
|
||||
|
basic concept, May need fine tuning, I have to run but will check back later today:
Code:
@sorted = map{$_->[0]}
sort {$b->[1] cmp $a->[1]}
map {[$_,substr($_,20,10)]} <INPUT>;
|
|
|||||
|
Thanks KevinADC -- what you wrote gave the basis for what follows. I know I need to handle errors on file actions. Anything else I should be thinking about here?
#! /usr/bin/perl # start of perl # use strict; # set vars $source = "rawfile"; $outfile = ">rawsorted"; # open the source file open(SOURCE,$source); @rawdata=<SOURCE>; # open the output file open(OUTFILE,$outfile); # sort at position 21 (note the 20) for length of 10 # sort in reverse order, hence the b before a in sort{ cmp } statement @sorted = map{$_->[0]} sort {$b->[1] cmp $a->[1]} map {[$_,substr($_,20,10)]} @rawdata; # write the sorted file to disk print OUTFILE @sorted; close SOURCE; close OUTFILE; my rawfile stored on disk = > cat rawfile Joe_________12_Main_St__A001________LX Benny_______5_Spring____A002________LX Will________2_A_St______A003________LX Carl________15_X_Way____A004________LX my final sorted file = cat rawsorted Carl________15_X_Way____A004________LX Will________2_A_St______A003________LX Benny_______5_Spring____A002________LX Joe_________12_Main_St__A001________LX p.s. How do people get their 'code' inserted in such a way to properly indent and format? I don't see a function for that on-screen. |
|
||||
|
Assumes the lines of the file do not need to be filtered or validated before processing:
Code:
#! /usr/bin/perl
# start of perl
use strict;
use warnings;
# set vars
my $source = 'rawfile';
my $outfile = 'rawsorted';
# open the source file
open(SOURCE,$source) or die "Can't open $source: $!";
my @rawdata = <SOURCE>;
close SOURCE;
# open the output file
open(OUTFILE, '>', $outfile) or die "Can't open $outfile: $!";
# sort at position 21 (note the 20) for length of 10
# sort in reverse order, hence the b before a in sort{ cmp } statement
print OUTFILE map{$_->[0]}
sort {$b->[1] cmp $a->[1]}
map {[$_,substr($_,20,10)]} @rawdata;
close OUTFILE;
Use the code tags to display formatted code, see the FAQ section of this forum for details. |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|