adiciona nova linha após cada final de conteúdo do arquivo ao mesclar vários arquivos

1

Eu tenho escrito shell script para mesclar o conteúdo do arquivo diferente Eu criei diretórios f1, f2, d1, d2 e arquivos sob eles, eu preciso mesclar o conteúdo de todos os arquivos: comand is

(find /home/ah5024331/f1 /home/ah5024331/f2  /home/ah5024331/d1  /home/ah5024331/d2 /home/ah5024331/f1 /home/ah5024331/f2  -type f | xargs -i cat {} ) > t.txt

saída é:

--this is new text from f1 ----
--this is text from f2 ------this is new text from d1 ------this is new text from d2 -----this is new text from f1 ----

Eu preciso adicionar uma nova linha após cada final de arquivo como:

--this is new text from f1 ----
--this is text from f2
------this is new text from d1 
------this is new text from d2 
-----this is new text from f1 ----

Como fazer isso?

Qualquer ajuda seria apreciada com antecedência.

    
por user 22.06.2015 / 14:41

3 respostas

0

Tente isto:

#!/bin/bash
for f in $(find /home/ah5024331/f1 /home/ah5024331/f2 \
    /home/ah5024331/d1 /home/ah5024331/d2 -type f)
do
    cat "$f" >> t.txt
    echo >> t.txt
done

Isto adicionará uma nova linha após o final de cada arquivo, no entanto, se algum desses arquivos já tiver uma nova linha no final, você verá uma linha extra em branco na saída (como mencionado por @ mnmnc nos comentários).

    
por 22.06.2015 / 14:53
0

Crie um arquivo fictício com uma nova linha.

echo -n "" > /tmp/newline.txt

Agora, execute seu script como abaixo.

(find /home/ah5024331/f1 /home/ah5024331/f2  /home/ah5024331/d1  /home/ah5024331/d2 /home/ah5024331/f1 /home/ah5024331/f2  -type f | xargs -i cat {} /tmp/newline.txt ) > t.txt
    
por 23.06.2015 / 07:09
0

Usando o GNU Parallel, é assim:

(find ...  -type f | parallel -j1 cat {}';'echo ) > t.txt

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh. E também pode substituir muitos for loops como neste caso.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Se o GNU Parallel não for empacotado para sua distribuição, você pode fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 10.07.2015 / 11:51