A expansão de variáveis do shell está convertendo $FILE
em uma string vazia. Você precisa colocar uma barra invertida na frente de $FILE
para impedir que o shell faça a expansão.
Estou tentando dividir um número enorme de arquivos gz em blocos compactados com gzip de N-line.
Para demonstrar, vamos considerar o seguinte:
seq 100 | gzip > big_file0.gz
Eu posso dividir isso em vários arquivos compactados de 10 linhas da seguinte maneira:
zcat big_file0.gz | split -l 10 --filter='gzip > $FILE.gz' - big_file0.
Vamos supor que temos vários arquivos grandes big_file0.gz
, big_file1.gz
...
Eu gostaria agora de dividir cada um desses arquivos usando o GNU paralelo. Aqui está o comando que eu sugiro:
parallel "zcat {} | split -l 10 --filter='gzip > $FILE.gz' - {.}." ::: big_file0.gz big_file1.gz
No entanto, a substituição do shell por $FILE
não funciona conforme o esperado. $FILE
é substituído por uma string vazia, então toda a saída é gravada em um arquivo chamado .gz
.
Como posso obter a substituição de $FILE
para funcionar como esperado no GNU paralelo?
Hoje você usaria a opção --pipe
do GNU Parallel:
parallel --seqreplace // "zcat {} | parallel --pipe -N 10 gzip '>{.}.{#}.gz'" ::: big_file0.gz big_file1.gz
Se você está certo em adicionar big_file0.gz big_file1.gz
, é ainda mais simples:
zcat big_file0.gz big_file1.gz | parallel --pipe -N 10 gzip '>{#}.gz'
Tags shell gnu-parallel