The sort function takes an optional subroutine which is where you can add
you logic for the sort.  The subroutine is passed two items from the list at
a time and needs to return -1 is the first item comes first, 1 if the second
item comes first, or 0 if the values are equal.  The vales are passed to
your routine as $a and $b;

Something like this should do it:

# Untested, but I hope this helps

# Open $file1 and read lines into the array
open FILE1, $file1;
my @file1 = <FILE1>;
close FILE1;

# Sort it!
# The sub: split $a, $split $b, use "cmp" to compare the string values
@file2 = sort {@a=split('|',$a) ;@b=split('|',$b); $a[11] cmp $b[11]}
(@file1);

# Open $file2 and write the sorted data to it
open FILE2, ">$file2";
print FILE2 join('', @file2);
close FILE2;

Notes:
"cmp" does an ASCII comparison, so "Abe" is less than "abe".  If you want to
to be equal use lc() when you "cmp" (compare) them.  Also if you want a
numeric compare instead of a string compare, use "<=>" instead of "cmp".

Rob


-----Original Message-----
From: Mayank [mailto:[EMAIL PROTECTED]]
Sent: Monday, January 28, 2002 9:56 AM
To: PERL
Cc: [EMAIL PROTECTED]
Subject: sort


Hi all

i'm a newbie.....so this might appear to be an easy one!

How can i have an equivalent of following UNIX command in PERL?
sort -t "|" -k 11,11 $file1 > $file2
Which means sort file "$file1" on the basis of 11th field with "|" as
the delimiter

Thanks in advance

Regards
Mayank

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to