2016-06-16 3 views
5

は、私は別のファイル名で出力を持っている:私は、このコマンドを使用してい複数のファイルの列を整然とした方法で貼り付けるにはどうすればいいですか?

file_1.dat..file_15.dat:

paste result_*.dat | column -s $'\t' -t >> cache/Final_Evolution.dat 

しかし、私の出力ファイルは、このようにソートされ、Iなぜ分からない:

file_1.dat 
file_11.dat 
file_13.dat 
file_15.dat 
file_3.dat 
file_5.dat 
file_7.dat 
file_9.dat 

をだから私が言及したコマンドを使用するときに私は1,3,5,7をしたいとき、データ列の順序は... 1、11、13です...

T非常に前もってあなたをハンクします。あなたはsortと方法を探している場合

+5

ファイル名を正規化します。 'ファイル内のfについて?_; dat; mv "$ f" "$ {f/_/_ 0}"を実行します。 done' – choroba

+0

@chorobaはい!!!それは動作します!大変ありがとうございます。 – Enrique

+0

これは、Linuxのglobパターン(アルファベット順)の順序付けのために発生しています。 http://unix.stackexchange.com/questions/38317/glob-with-numerical-order – blackSmith

答えて

4

最初にファイル名を正規化します。

for f in file_?.dat ; do 
    mv "$f" "${f/_/_0}" 
done 

それは(?が1文字に一致)一桁の番号を持つすべてのファイルに_0_を置き換えます。

1

、あなたが

sort -t _ -k 2 -g cache/Final_Evolution.dat 

としてそれを行うことができる場所後の第2列に_-k 2でデ制限する-tデ制限(数字列です)数値ソートの場合は-gです。

file_1.dat 
file_3.dat 
file_5.dat 
file_7.dat 
file_9.dat 
file_11.dat 
file_13.dat 
file_15.dat 
+0

'sort -V'もここで役立ちます。 –

1

あなたはコメントで指摘したように、ファイルを正規化するか、またはこのようなグロブ使用することができます。

paste file_?.dat file_??.dat 

?は、1つのcharcterに拡大していきますので、file_?.datだけに展開することができます:file_1.dat .. file_9.datfile_??.datfile_10.datにしか展開できません。file_99.dat

グロブにマッチするファイルがない場合、文字通り扱われるので、これは失敗します。

関連する問題