按数字顺序并排粘贴多个文件

时间:2013-06-12 20:47:54

标签: shell paste

我在目录中有许多文件,文件名类似于file1,file2,file3,file4,file5,.....,file1000。它们具有相同的尺寸,每个都有5列和2000行。我想将它们以数字顺序并排粘贴到一个大文件中,因此最终的大文件应该有5000列和2000行。

我试过

for x in $(seq 1 1000); do 
paste `echo -n "file$x "` > largefile
done

有没有一种方法可以按照数字顺序粘贴这些文件(file1,file2,file3,file4,file5,...,file10,file11,..., file1000)?

例如:

文件1

1 1 1 1 1
1 1 1 1 1 
1 1 1 1 1
...

file2的

2 2 2 2 2 
2 2 2 2 2
2 2 2 2 2 
....

文件3

3 3 3 3 3 
3 3 3 3 3 
3 3 3 3 3
....

粘贴file1 file2 file3 ....文件1000> largefile

largefile

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
....

感谢。

3 个答案:

答案 0 :(得分:12)

如果您当前的shell是bash:paste -d " " file{1..1000}

答案 1 :(得分:2)

您需要使用前导零重命名文件,例如

paste <(ls -1 file* | sort -te -k2.1n) <(seq -f "file%04g" 1000) | xargs -n2 echo mv

以上是“干跑” - 如果您满意,请删除echo

或者您可以使用例如perl的

ls file* | perl -nlE 'm/file(\d+)/; rename $_, sprintf("file%04d", $1);'

然后你可以

paste file*

答案 2 :(得分:2)

使用zsh

setopt extendedglob
paste -d ' ' file<->(n)

<x-y>用于匹配xy的正十进制整数。可以省略x和/或y,因此<->是任何正十进制整数。它也可以写成[0-9]####zsh相当于正则表达式+。)

(n) globbing限定符n globbing限定符打开数字排序,对文件名中出现的所有十进制数字序列进行排序。