如何有序地粘贴来自多个文件的列?
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.dat
和file_??.dat
只能展开到file_10.dat
.. file_99.dat
.
然而,如果您没有与 glob 匹配的文件,这将失败,因为它将被逐字处理。
首先规范化文件名。
for f in file_?.dat ; do
mv "$f" "${f/_/_0}"
done
将所有单数文件中的_
替换为_0
(?
匹配单个字符)
我有不同文件名的输出: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.dat
和file_??.dat
只能展开到file_10.dat
.. file_99.dat
.
然而,如果您没有与 glob 匹配的文件,这将失败,因为它将被逐字处理。
首先规范化文件名。
for f in file_?.dat ; do
mv "$f" "${f/_/_0}"
done
将所有单数文件中的_
替换为_0
(?
匹配单个字符)