7

我在一个目录中有很多文件,它们的文件名相似,例如 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
...

文件2

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
....

粘贴文件 1 文件 2 文件 3 .... 文件 1000 > 大文件

大文件

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
....

谢谢。

4

3 回答 3

12

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

于 2013-06-12T21:17:04.367 回答
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*
于 2013-06-12T21:06:06.690 回答
2

zsh

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

<x-y>x是匹配从到 的正十进制整数yx和/或y可以省略,<->任何正十进制整数也是如此。它也可以写成[0-9]####相当于zshregex +)。

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

于 2013-06-13T07:04:16.267 回答