Tenho vários arquivos com os quais quero concatenar cat
. Digamos
File1.txt
foo
File2.txt
bar
File3.txt
qux
Quero concat para que o arquivo final se pareça com:
foo
bar
qux
Em vez disso, com o costume cat File*.txt > finalfile.txt
foo
bar
qux
Qual é o caminho certo para fazer isso?
Respostas:
Você pode fazer:
Verifique se o arquivo
finalfile.txt
não existe antes de executar o comando acima.Se você tem permissão para usar,
awk
pode:fonte
AWK '{print $0}' *.txt
awk 'FNR==1 && NR > 1 ...'
Porém, você pode se proteger facilmente disso.>finalfile.txt
após,done
poderá substituir em vez de anexar, o que removerá o requisito para garantir que o arquivo esteja ausente ou vazio antes do loop.Se você tiver poucos arquivos suficientes para listar cada um deles, poderá usar a substituição de processos no Bash, inserindo uma nova linha entre cada par de arquivos:
fonte
Se fosse eu, usaria o sed:
Nesse padrão sed, $ tem dois significados: primeiro, corresponde apenas ao número da última linha (como um intervalo de linhas para aplicar um padrão) e, em segundo lugar, ao final da linha no padrão de substituição.
Se a sua versão do sed não tiver
-s
(processar arquivos de entrada separadamente), você poderá fazer tudo isso como um loop:fonte
sed -s '$G' *.txt > finalfile.txt
find
no lugar do*.txt
, o que significava que o arquivo foi anexado a ele!Você pode fazer isso usando,
xargs
se quiser, mas a ideia principal ainda é a mesma:fonte
xargs
muito mais fácil usar do que loops no bash.Isso funciona no Bash:
Ao contrário das respostas com
>>
(anexar), a saída desse comando pode ser canalizada para outros programas.Exemplos:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
(parens são opcionais)for ... done | less
(canalizando para menos)for ... done | head -n -1
(isso retira a linha em branco à direita)fonte
Foi assim que fiz no OsX 10.10.3
desde que o simples comando 'eco' sem parâmetros tenha terminado em nenhuma nova linha inserida.
fonte
Em python, isso concatena com linhas em branco entre arquivos (o que
,
suprime a adição de uma linha em branco à direita):Aqui está o feio one-liner python que pode ser chamado a partir do shell e imprime a saída em um arquivo:
fonte