将文件合并为一个

将文件合并为一个

如果我有一个具有以下文件名的文件夹:

cluster_sizes_0.txt
cluster_sizes_1.txt
cluster_size_2.txt

ETC。

每个文件包含一列值。

Linux 中是否有一个命令可以将所有文件合并到 cluster_all.txt 中?

这个新文件中的第一列将对应于cluster_sizes_0.txt,第二列将对应于cluster_sizes_1.txt等等。

簇 txt 文件可能多达 200 个,但每个文件夹的情况都会有所不同。我正在寻找一种方法来组合这些文件,而不是逐个复制。

另外,我需要确保它们按顺序粘贴到文件中。这可能会对编号系统产生一些问题,因为如果低于 10,我只包含个位数。

例如:

paste cluster_size.* > cluster_all.txt由于编号原因,未按顺序粘贴它们。如何在不手动更改所有编号的情况下修复编号?

答案1

该命令paste将列合并在一起。因此,例如,如果我们有这 3 个文件,那么粘贴将创建不错的结果:

$ cat file_1.txt
1a
1b
1c

$ cat file_2.txt
2a
2b
2c

$ cat file_3.txt
3a
3b
3c

$ paste -d, file_1.txt file_2.txt file_3.txt
1a,2a,3a
1b,2b,3b
1c,2c,3c

所以现在的问题实际上是如何让文件按顺序排列。我们可以欺骗并让ls别人为我们做事

$ ls     
file_1.txt   file_13.txt  file_17.txt  file_20.txt  file_6.txt
file_10.txt  file_14.txt  file_18.txt  file_3.txt   file_7.txt
file_11.txt  file_15.txt  file_19.txt  file_4.txt   file_8.txt
file_12.txt  file_16.txt  file_2.txt   file_5.txt   file_9.txt

$ ls -v
file_1.txt  file_5.txt  file_9.txt   file_13.txt  file_17.txt
file_2.txt  file_6.txt  file_10.txt  file_14.txt  file_18.txt
file_3.txt  file_7.txt  file_11.txt  file_15.txt  file_19.txt
file_4.txt  file_8.txt  file_12.txt  file_16.txt  file_20.txt

$ paste -d, $(ls -v file_*.txt)
1a,2a,3a,4a,5a,6a,7a,8a,9a,10a,11a,12a,13a,14a,15a,16a,17a,18a,19a,20a
1b,2b,3b,4b,5b,6b,7b,8b,9b,10b,11b,12b,13b,14b,15b,16b,17b,18b,19b,20b
1c,2c,3c,4c,5c,6c,7c,8c,9c,10c,11c,12c,13c,14c,15c,16c,17c,18c,19c,20c

现在,请注意解析ls通常是一件坏事。如果有任何意外的文件名或奇怪的字符(例如空格、通配符),那么它可能会破坏您的脚本。但如果您确信文件名是“好的”,那么这将起作用。

相关内容