Импорт данных без заголовков и перестановка данных столбцов - PullRequest
1 голос
/ 04 марта 2012

У меня есть 100 .dat-файлов, таких как файл в левой панели, которые мне нужно импортировать без заголовков, а затем отсортировать строки.

workspace

ОТВЕТИТЬ за этовручную, файл за файлом:

data=sortrows(data,2); #sort all columns of data via the 2nd col


fid=fopen('pole_2_TurbI_chamber_05_RSM.xy');
[x ~] = textscan (fid, '%f %f', 'HeaderLines', 4);  # reads file correctly
fclose(fid);

v(:,1)=cell2mat(x(:,1)); # convert from cell to array
v(:,2)=cell2mat(x(:,2));
v=sortrows(v,2);         # sort rows according to column 2

% fig
plot(v(:,1),-v(:,2),'ro');

Как я могу распространить это на все файлы в моем каталоге?Возможно, присваивая каждой импортированной переменной имя файла ... если возможно.С уважением,

1 Ответ

1 голос
/ 04 марта 2012

В системе 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

Перезапишет файлы данных; убедитесь, что вы создали резервные копии оригиналов.

...