Geralmente, isso ocorre devido a citações duplas.
As citações são irritantes, então tente usar uma função de shell:
mysed() {
sed 's/\s.*$// ; s/\(.*\)/\L/'
}
export -f mysed
parallel -a oldfile.txt -k --block -1 --pipe-part mysed > newfile.txt
Tentando paralelizar uma operação sed, no entanto, enquanto a versão paralela funciona, ela retorna uma saída errada.
A operação sed que eu gostaria de paralelizar (funciona)
sed 's/\s.*$// ; s/\(.*\)/\L/' < oldfile.txt > newfile.txt
Minha versão paralela da operação sed acima (não funciona corretamente por algum motivo):
parallel -a oldfile.txt -k --block $BYTES --pipe-part "sed 's/\s.*$// ; s/\(.*\)/\L/'" > newfile.txt
Geralmente, isso ocorre devido a citações duplas.
As citações são irritantes, então tente usar uma função de shell:
mysed() {
sed 's/\s.*$// ; s/\(.*\)/\L/'
}
export -f mysed
parallel -a oldfile.txt -k --block -1 --pipe-part mysed > newfile.txt
GNU parallel invoca o comando que você especifica através de um shell. Isso é ocasionalmente conveniente, mas geralmente é difícil, como você descobriu, por causa dos problemas de cotação e da dependência da variável de ambiente SHELL . (Ole e eu já tivemos palavras sobre isso.)
Você tem que dizer em paralelo que o que você está passando é um executável com argumentos , ao invés do comportamento padrão que assume que os argumentos são um comando a ser executado pelo programa chamado pela variável de ambiente SHELL , dividida arbitrariamente em partes que são unidas com um espaço entre elas . Não existe tal opção; o mais parecido é dizer paralelamente para citar o comando para que o shell acabe executando o comando correto.
parallel -a oldfile.txt -k --block $BYTES --pipe-part -q sed 's/\s.*$// ; s/\(.*\)/\L/' > newfile.txt
Tags sed shell gnu-parallel quoting