2012-03-04 6 views
1

左ペインにあるような100個の.datファイルがあります。これはヘッダーなしでインポートしてから行をソートする必要があります。ヘッダーなしでデータをインポートして列データを並べ替える

workspace

手動でそれを行うためのANSWER、ファイルによってファイル:

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'); 

どのように私は私のディレクトリ内のすべてのファイルにこれを拡張することができますか?可能であれば、各インポートされた変数にファイル名を与えます。 よろしく、POSIXシステムで

+1

手動ソリューションの周りにループを置いて自動解決することはできませんか? – Pursuit

答えて

1

は、個々のファイルが

sort -k 2 /tmp/sortme.txt 

stdoutに書き込まれる出力を使用してソートすることができます。

あなたはファイルのグループをソートしたい場合は、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 

として呼び出すことができます。オリジナルをバックアップすることを確認してください。

+0

私は実際にファイルにもヘッダーを持っています。理想的にはそれを取り除きたいと思っています。しかし、私はLinux上ではないので、これを回避する方法はありますか? – HCAI

+0

作業コードをお知らせいただきありがとうございます。それは便利です!しかし、私はファイル自体を変更したくありません。ワイルドカードまたはループを使用してディレクトリ内のすべてのファイルをインポートするにはどうすればよいですか?私はすべてのファイルを 'pole _ * _ TurbI_chamber_05_RSM.xy'と呼んでいました。 – HCAI

+1

私は実際にはわかりません...私は大学でSun3ワークステーションで動作していたので、私はmatlabを使用していません。それは約20年前です。私は、その環境でファイルをインポートしたことを疑う。私はちょうど 'ストリップヘッダーとファイルの束を並べ替える'問題が面白いと思った。 –

関連する問題