Como concatenar dois arquivos em um loop?

0

Eu tenho dois arquivos que eu quero concatenar em um novo arquivo, mas eu quero fazê-lo usando um loop porque eu tenho diretórios diferentes (a, b, c, g e z) com os mesmos 2 arquivos. Meu loop é:

for i in a b c g z
do
    (cd $i/; for i in File_*_best3.txt *_new3.txt; do cat $i > combined.txt; done)
done

Mas meu resultado é um arquivo combined.txt exatamente igual ao meu segundo arquivo de entrada, então meu gato não está funcionando corretamente. Qual é o problema aqui?

    
por Paul 09.02.2017 / 18:39

2 respostas

1

O problema é que cada vez que cat é executado, o arquivo de saída é truncado (esvaziado). Isso porque você usa > para redirecionamento.

Alternativa:

for d in a b c g z
do
    (cd "$d"; rm -f combined.txt; for i in File_*_best3.txt *_new3.txt; do cat "$i" >>combined.txt; done)
done

ou

for d in a b c g z
do
    (cd "$d" && cat File_*_best3.txt *_new3.txt >combined.txt)
done

Suponho que File_*_best3.txt e *_new3.txt correspondam apenas a um nome de arquivo.

    
por 09.02.2017 / 18:43
0

Outra solução sem cd :

for d in a b c g z; do
    cat $d/{File_*_best3.txt,*_new3.txt} >$d/combined.txt
done
    
por 09.02.2017 / 18:58

Tags