Tentando usar o GNU Parallel com sed

5

Por que essa linha não faz nada? Eu estou tentando executar um comando "sed" em paralelo e não gera nada para "standard.txt"

$ Filetemp = o arquivo que estou editando em stream

standard.txt = o arquivo que estou enviando para

cat $Filetemp | parallel --pipe sed -e "s/[[:space:]]\+/ /g" > standard.txt

Este é o código original que funciona muito bem, mas demora demais:

sed -e "s/[[:space:]]\+/ /g" $Filetmp > standard.txt

Versão paralela do GNU: 20130922

Lubuntu 14,04

    
por Roboman1723 23.06.2014 / 17:59

2 respostas

4

Quando executo isso em um arquivo aleatório, tenho um problema de sintaxe. Você precisa citar o comando:

cat $Filetemp | parallel --pipe 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

Se isso ainda não funcionar, teste echo $Filetemp (ou escolha um arquivo manualmente) ou remova o redirecionamento para ver a saída como acontece (caso haja algum tipo de problema de sobrescrita).

    
por Oli 23.06.2014 / 18:35
0

Desde a versão 20140422, o GNU Parallel teve --pipepart , o que é altamente eficiente:

parallel -a $Filetemp --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

E a partir da versão 20161222, você pode usar --block -1 , o que dividirá $Filetemp em um bloco por joblot:

parallel -a $Filetemp --block -1 --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

Isso pode fornecer mais de 1 GB / s para cada núcleo, o que significa que você provavelmente está limitado por E / S. Você pode ver se este é o caso, olhando para:

iostats -dkx 1

Se a utilização for 100%, o disco é o gargalo.

    
por Ole Tange 04.04.2018 / 15:10