如果我有一个具有以下文件名的文件夹:
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
通常是一件坏事。如果有任何意外的文件名或奇怪的字符(例如空格、通配符),那么它可能会破坏您的脚本。但如果您确信文件名是“好的”,那么这将起作用。