如何有序地粘贴来自多个文件的列?

How to paste columns from multiple files in an orderly way?

我有不同文件名的输出:file_1.dat..file_15.dat

我正在使用这个命令:

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

但是我的输出文件是这样排序的,我不知道为什么:

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、11、13 ... 当我想要 1,3,5,7 ...

非常感谢您。

如果您正在寻找使用 sort 的方式,您可以按照

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

其中 -t 用于取消限制,_-k 2 用于取消限制后的第二列(即数字列)和 -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

您可以按照评论中指出的那样规范化文件,或者使用这样的 glob:

paste file_?.dat file_??.dat

?会展开到恰好一个字符,所以file_?.dat只能展开到:file_1.dat..file_9.datfile_??.dat只能展开到file_10.dat .. file_99.dat.

然而,如果您没有与 glob 匹配的文件,这将失败,因为它将被逐字处理。

首先规范化文件名。

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

将所有单数文件中的_替换为_0?匹配单个字符)