2013-06-12 25 views
6

我在文件名相似的文件夾中有很多文件,例如file1,file2,file3,file4,file5,.....,file1000。它們具有相同的維度,每一個都有5列和2000行。我想將它們按照數字順序並排粘貼到一個大文件中,因此最終的大文件應該有5000列和2000行。通過數字順序並排粘貼多個文件

我試圖

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

而不是在命令行中寫的所有文件名的,是有辦法,我可以粘貼在數字順序(文件1,文件2,文件3,文件4,file5這些文件,.. 。,file10,file11,...,file1000)?

例如:

file1的

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

粘貼文件1文件2 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 
.... 

感謝。

+0

reanme文件一個把領先的0將排序出 –

+0

我意識到我可能無法使用粘貼*> largefile在我的命令行,因爲在前面的步驟後,在同一目錄中有其他文件。我必須處理具有特定名稱的文件,例如「file $ n」。 – user1687130

回答

11

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

+0

_'bash'_或'zsh'或'ksh93'。該語法起源於'zsh'。 –

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

隨着zsh

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

<x-y>是從匹配正的十進制整數xyx和/或y可以省略,所以<->是任何正的十進制整數。它也可以寫成[0-9]####zsh相當於正則表達式+)。

(n)globbing qualifiersn通配符限定符打開數字排序,該排序對出現在文件名中的所有十進制數字序列進行排序。