use warnings; use strict; open my $INF, "<", "look.txt" or die "cannot open"; my @look = <$INF>; close($INF); my @out = sort { (split /\|/, $a)[4] <=> (split /\|/, $b)[5] } @look; for my $line (@out) { my @fields = split /\|/, $line; print join(",", @fields[0 .. 4]), "\n"; } __END__ #### use warnings; use strict; open my $INF, "<", "look.txt" or die "cannot open"; my @look = <$INF>; close($INF); my @key = map { (split /\|/)[4] } @look; my @out = @look[sort { $key[$a] <=> $key[$b] } 0 .. @look - 1]; for my $line (@out) { my @fields = split /\|/, $line; print join(",", @fields[0 .. 4]), "\n"; } __END__ #### #!ruby -w look = File.open("look.txt").readlines; # here I'm inclined to write 'map' instead of 'readlines' out = look.sort_by {|line| line.split("|")[4] }; out.each {|line| fields = line.split "|"; puts fields[0 .. 4].join(","); } __END__