В системе posix отдельный файл может быть отсортирован с помощью
sort -k 2 /tmp/sortme.txt
Вывод будет записан на стандартный вывод.
Если вы хотите отсортировать группу файлов, вы должны обернуть все в цикл for:
for i in *.dat
do
sort -k 2 $i > $i.tmpsort -k 2
mv $i.tmp > $i
done
(в этом примере убедитесь, что у вас нет пар исходных входных файлов с именами x.dat и x.dat.tmp, или вы будете использовать x.dat.tmp).
Вот версия, написанная на Perl, которая должна быть переносимой для вашей системы (независимо от того, что вы используете ...). Скрипт удаляет все строки, которые не начинаются с цифр 0-9.
#! /usr/bin/perl
use strict;
sub getcol2 {
$_[0] =~ /\d+\.?\d*\s+(-?\d+\.\d+)/;
print "$1\n";
return( $1 );
}
for my $file ( @ARGV ) {
my $INPUT;
my @data;
open($INPUT, "<", $file) or die "Cannot open '$file' for input: $!";
while( <$INPUT> ) {
#print "$_";
push @data, $_ if(/^\d/);
}
close $INPUT;
@data = sort { getcol2( $b ) <=> getcol2( $a ) } @data;
my $OUTPUT;
open( $OUTPUT, ">", $file );
for my $line ( @data ) {
print $OUTPUT $line;
}
close( $OUTPUT );
}
Я назвал его «sortdata.pl», его можно назвать
perl sortdata.pl *.dat
Перезапишет файлы данных; убедитесь, что вы создали резервные копии оригиналов.