Thanks to all of you for sharing your codes & notes...

'sort { $a->[1] cmp $b->[1] || $a->[0] cmp $b->[0] }' - It did the
trick...Thanks once again...

Cheers,
Parag




On Sat, Oct 31, 2009 at 1:29 AM, John W. Krahn <jwkr...@shaw.ca> wrote:

> Parag Kalra wrote:
>
>> Hello Folks,
>>
>
> Hello,
>
>
>  This is my first post here.
>>
>> I am trying to emulate Linux 'sort' command through Perl. I got following
>> code through Internet to sort the text file:
>>
>> # cat sort.pl
>> my $column_number = 2; # Sorting by 3rd column since 0-origin based
>> my $prev = "";
>> for (
>>  map { $_->[0] }
>>  sort { $a->[1] cmp $b->[1] }
>>  map { [$_, (split)[$column_number]] }
>>  <>
>> ) {
>>  print unless $_ eq $prev;
>>  $prev = $_;
>> }
>>
>> Suppose I want to sort the data of text file having following rows &
>> columns:
>>
>> # cat test.out
>> jhvXgF    U13GWt    3OvMCf    VMkAWj
>> 4ewejk    pFnjd4    ie0hZF    pPipQJ
>> 4ewejk    4sqprx    ie0hZF    cqtexi
>> FT9mWp    d4fgMB    gvZRJU    XRRu0N
>> hnzI2c    GXAXWF    6xKH7A    3dLh18
>>
>> When I sort it using the 'sort' command by 3rd column I get following
>> output:
>>
>> # sort -u -k 3 test.out
>> jhvXgF    U13GWt    3OvMCf    VMkAWj
>> hnzI2c    GXAXWF    6xKH7A    3dLh18
>> FT9mWp    d4fgMB    gvZRJU    XRRu0N
>> 4ewejk    4sqprx    ie0hZF    cqtexi
>> 4ewejk    pFnjd4    ie0hZF    pPipQJ
>>
>> However when I sort the same text file by 3rd column using the piece of
>> code, I get following:
>> jhvXgF    U13GWt    3OvMCf    VMkAWj
>> hnzI2c    GXAXWF    6xKH7A    3dLh18
>> FT9mWp    d4fgMB    gvZRJU    XRRu0N
>> 4ewejk    pFnjd4    ie0hZF    pPipQJ
>> 4ewejk    4sqprx    ie0hZF    cqtexi
>>
>> Difference can be seen the last 2 row values of 2nd column.
>>
>>  The reason being 'ie0hZF' is repeated twice in 3rd column and also
>> corresponding values in 1st column are same - '4ewejk' so discrepancy has
>> occured in 2nd column.
>> Can anybody help me fix the bug in the above code.
>>
>
> This is not a bug.  Because you are only sorting based on one column the
> order of the other columns is indeterminate.  If you want to sort the whole
> line like 'sort' does then change:
>
>
>  sort { $a->[1] cmp $b->[1] }
>
> To:
>
>  sort { $a->[1] cmp $b->[1] || $a->[0] cmp $b->[0] }
>
>
>
>
> John
> --
> The programmer is fighting against the two most
> destructive forces in the universe: entropy and
> human stupidity.               -- Damian Conway
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>

Reply via email to