O GNU parallel
é feito exatamente para esse tipo de coisa. Você pode executar seu script várias vezes de uma vez, com dados diferentes da sua entrada inseridos para cada um:
cat input.txt | parallel --pipe your-script.sh
Por padrão, ele irá gerar processos de acordo com o número de processadores em seu sistema, mas você pode personalizar isso com -j N
.
Um truque particularmente interessante é o recurso de embrulhar shebang. Se você alterar a primeira linha do seu script Bash para:
#!/usr/bin/parallel --shebang-wrap --pipe /bin/bash
e alimenta os dados na entrada padrão, tudo acontecerá automaticamente. Isso é menos útil quando você tem um código de limpeza que precisa ser executado no final, o que você pode fazer.
Há algumas coisas a serem observadas. Uma é que ela vai dividir sua entrada em partes sequenciais e usar essas uma de cada vez - ela não intercala linhas. A outra é que esses fragmentos são divididos por tamanho, sem considerar quantos registros existem. Você pode usar --block N
para definir um tamanho de bloco diferente em bytes. No seu caso, não mais do que um oitavo do tamanho do arquivo deve estar correto. Parece que seu arquivo pode ser pequeno o suficiente para acabar em um único bloco, o que poderia frustrar o propósito.
Há muitas opções para casos de uso diferentes, mas o tutorial aborda as coisas muito bem . Opções nas quais você também pode estar interessado incluem --round-robin
e --group
.