Concatena arquivos específicos em um único arquivo

5

Em uma pasta contendo arquivos X, eu preciso concatenar arquivos Y (onde X > Y) juntos em um único arquivo de texto. Eu tenho os nomes de arquivos (de arquivos Y) que eu preciso para concatenar.

    
por name_masked 16.02.2012 / 20:37

3 respostas

9

Você pode usar o comando cat (consulte man cat para obter mais informações) para concatenar os arquivos de texto.

Se você deseja criar um novo arquivo

cat [FILE1] [FILE2]... > new_file

ou se você deseja anexar a um arquivo existente, use-o assim

cat [FILE1] [FILE2]... >> file 
    
por 16.02.2012 / 21:12
7

Se os nomes dos arquivos Y estiverem listados em um arquivo list , uma combinação simples de xargs e cat será suficiente:

xargs cat <list >>concatenation_of_files

No caso de você ter cuidado e listar os arquivos um por linha (para evitar problemas com espaços em nomes de arquivos), basta adicionar uma opção -d delimitador:

xargs -d'\n' cat <list >>concatenation_of_files

(Isto assume concatenation_of_files é inicialmente inexistente ou vazio).

    
por 17.02.2012 / 21:15
0

As respostas estão usando o bash.

Digamos que você queira conciliar os arquivos json em seu diretório:

cat *json > all.json

Incluindo subdiretórios:

shopt -s globstar
cat **/*json > all.json

No entanto, se você tiver milhares a milhões de arquivos, você encontrará:

bash: /bin/cat: Argument list too long

Nesse caso, faça o seguinte, que também mostra o arquivo atual sendo processado:

shopt -s globstar
rm concat.json
find . -path "**/*.json" | while read -r file; do
    echo -ne "\r$file"
    cat "$file" >> concat.json
done

Postado sobre esta questão, como esta outra pergunta foi encerrada .

    
por 11.04.2018 / 18:46

Tags