gunzip vários arquivos e concatenar em paralelo?

2

É possível gunzipar vários arquivos e concatená-los em um arquivo grande, mas fazê-lo em paralelo, dada uma máquina multicore? Por exemplo, agora eu faço:

gunzip -c file1.gz > final
gunzip -c file2.gz >> final
gunzip -c file3.gz >> final
gunzip -c file4.gz >> final

Posso fazer o mesmo para que o processamento gunzip dos diferentes arquivos seja feito em diferentes CPUs na máquina multicore e eles sejam concatenados no mesmo arquivo final?

    
por 719016 02.04.2012 / 10:36

2 respostas

4

É um pouco mais curto fazer isso usando o GNU Parallel:

parallel gunzip -c ::: file*.gz > final

mas essencialmente também grava em arquivos temporários.

Assista aos introvideos para saber mais: link

    
por 03.10.2012 / 16:24
1

você tem que usar arquivos temporários para isso:

gunzip -c file1.gz > final &
one=$!
gunzip -c file2.gz > final2 &
two=$!
gunzip -c file3.gz > final3 &
three=$!
gunzip -c file4.gz > final4 &
four=$!

wait $one && wait $two && wait $three && wait $four
cat final2 >> final
cat final3 >> final
cat final4 >> final

para descomprimir as partes de um arquivo maior no arquivo final, você deve saber o tamanho descompactado das partes. só então você poderia criar um arquivo vazio biiiig e escrever a saída da descompressão para a posição correta no arquivo grande (com dd por exemplo). já que você não conhece o tamanho descomprimido (sem descompactar as partes primeiro) isso não funcionará.

    
por 02.04.2012 / 10:44