2013-06-12 15 views
6

Mam wiele plików w katalogu o podobnych nazwach plików jak plik1, plik2, plik3, plik4, plik5, ....., plik1000. Są one tego samego wymiaru, a każdy z nich ma 5 kolumn i 2000 linii. Chcę wkleić je wszystkie razem obok siebie w porządku liczbowym do jednego dużego pliku, więc końcowy duży plik powinien mieć 5000 kolumn i 2000 linii.Wklej obok siebie wiele plików według kolejności numerycznej.

Próbowałem

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

Zamiast pisać wszystkie nazwy plików w linii poleceń, czy istnieje sposób mogę wkleić te pliki w kolejności numerycznej (plik1, plik2, file3, file4, file5 .. ., file10, file11, ..., file1000)?

na przykład:

plik1

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

plik2

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

plików 3

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

wklej plik1 plik2 plik3 .... Plik 1000> dużyplik

dużyplik

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

Dzięki.

+0

reanme pliki umieścić wiodących 0 w będzie sortować to na zewnątrz –

+0

Zdałem sobie sprawę, mogę nie być w stanie użyć paste *> largefile w mojej linii poleceń, ponieważ po poprzednich krokach, istnieją inne pliki w tym samym katalogu. Mam do czynienia tylko z plikami o określonych nazwach, takich jak "plik $ n". – user1687130

Odpowiedz

11

Jeśli prąd powłoki bash: paste -d " " file{1..1000}

+0

_'bash'_ lub 'zsh' lub' ksh93'. Ta składnia pochodzi z 'zsh'. –

2

trzeba zmienić nazwy plików z wiodącymi zerami, jak

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

powyższe jest dla „sucho” - Usunąć echo jeśli jesteś zadowolony ...

lub można użyć np Perl

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

i po można

paste file* 
2

Z zsh:

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

<x-y> jest dopasowanie pozytywne dziesiętne liczby całkowite od x do y. x i/lub y można pominąć, więc <-> jest dowolną dodatnią dziesiętną liczbą całkowitą. Można również zapisać [0-9]## (## będący odpowiednikiem regex +zsh).

Numer (n) to kwalifikatory do globowania . Kwalifikator globowania n włącza sortowanie numeryczne, które sortuje wszystkie ciągi cyfr dziesiętnych pojawiające się w nazwach plików.