único - unir varios arquivos linux
Como anexar conteúdo de vários arquivos em um arquivo (7)
Outra opção é sed
:
sed r 1.txt 2.txt 3.txt > merge.txt
Ou...
sed h 1.txt 2.txt 3.txt > merge.txt
Ou...
sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here
Ou sem redirecionamento ...
sed wmerge.txt 1.txt 2.txt 3.txt
Note que a última linha escreve também merge.txt
(não wmerge.txt
!). Você pode usar w"merge.txt"
para evitar confusão com o nome do arquivo e -n
para saída silenciosa.
Claro, você também pode encurtar a lista de arquivos com curingas. Por exemplo, no caso de arquivos numerados, como nos exemplos acima, você pode especificar o intervalo com chaves desta maneira:
sed -n w"merge.txt" {1..3}.txt
Eu quero copiar o conteúdo de cinco arquivos para um arquivo como é. Eu tentei fazer isso usando cp para cada arquivo. Mas isso substitui o conteúdo copiado do arquivo anterior. Eu também tentei
paste -d "\n" 1.txt 0.txt
e não funcionou.
Eu quero o meu script para adicionar a nova linha no final de cada arquivo de texto.
por exemplo. Arquivos 1.txt, 2.txt, 3.txt. Coloque o conteúdo de 1,2,3 em 0.txt
Como eu faço isso ?
Outra opção, para aqueles que ainda tropeçam neste post como eu fiz, é usar find -exec
:
find . -type f -name '*.txt' -exec cat {} + >> output.file
No meu caso, eu precisava de uma opção mais robusta que fosse analisada por vários subdiretórios, então optei por usar o find
. Quebrando:
find .
Olhe dentro do diretório de trabalho atual.
-type f
Apenas interessado em arquivos, não diretórios, etc.
-name '*.txt'
Recolher o resultado definido pelo nome
-exec cat {} +
Execute o comando cat para cada resultado. "+" significa que apenas 1 instância de cat
é gerada (thx @gniourf_gniourf)
>> output.file
Conforme explicado em outras respostas, acrescente o conteúdo cat-ed ao final de um arquivo de saída.
Se seus arquivos contiverem cabeçalhos e você quiser removê-los no arquivo de saída, poderá usar:
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
Se todos os seus arquivos estiverem no diretório único, você pode simplesmente fazer
cat * > 0.txt
Arquivos 1.txt, 2.txt, .. entrarão em 0.txt
Se você deseja anexar o conteúdo de 3 arquivos em um arquivo, o seguinte comando será uma boa escolha:
cat file1 file2 file3 | tee -a file4 > /dev/null
Ele combinará o conteúdo de todos os arquivos no arquivo4, lançando a saída do console para /dev/null
.
Você precisa do comando cat
(abreviação de concatenate), com o redirecionamento de shell ( >
) em seu arquivo de saída
cat 1.txt 2.txt 3.txt > 0.txt
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
Eu encontrei esta página porque eu precisava juntar 952 arquivos em um. Achei que isso funcionaria muito melhor se você tivesse muitos arquivos. Isto fará um loop para quantos números você precisar e catará cada um usando >> para acrescentar ao final de 0.txt.