combinando n número de arquivos com o comando cat

0

Eu tenho um número n de arquivos, armazenei nomes de arquivos em uma lista e quero combiná-los. Eu estou fazendo isso manualmente, ou seja, se n = 3

cat ${filename[1]} ${filename[2]} ${filename[3]} > newfile

Se o conteúdo do arquivo for o seguinte:

filename[1]:
  line1
  line2

filename[2]:
  line3
  line4

filename[3]:
  line5
  line6

Eu quero que o newfile tenha

newfile:
line1
line2
line3
line4
line5
line6

Como posso fazer isso automaticamente, ou seja, para qualquer número de arquivos "n", eu quero combiná-los sequencialmente, como estou fazendo aqui para três arquivos manualmente

    
por Syed Moez 25.08.2015 / 01:41

3 respostas

4

Você pode usar "@", por exemplo:

$ files=( /tmp/a "/tmp/a file from windows" /tmp/myfile )
$ cat "${files[@]}" > newfile

O '@' expande todo o conteúdo da matriz. É semelhante a * , exceto que tratará cada elemento individualmente, enquanto * combinará todos os elementos como um.

    
por 25.08.2015 / 02:02
1

A maneira mais fácil de fazer isso é:

$ for i in {1..3}; do cat inputfile$i>>outputfile; done
    
por 25.08.2015 / 02:21
0

Isso é trivial com zsh .

% echo blah > a; echo asdf > b; echo harfjr > c;
% filenames=(a b c d e)
% print -l $filenames[1,3]
a
b
c
% cat $filenames[1,3]
blah
asdf
harfjr
% cat $filenames[1,3] > anewfile
% cat anewfile
blah
asdf
harfjr
% somenum=2   
% print -l $filenames[1,$somenum]
a
b
% 

Se o shell for realmente bash ou ksh uhhh não sei.

    
por 25.08.2015 / 01:52