Pourquoi cette ligne ne fait rien? J'essaie d'exécuter une commande "sed" en parallèle et rien ne sort de "standard.txt"
$ Filetemp = le fichier en cours d'édition
standard.txt = le fichier sur lequel je produis
cat $Filetemp | parallel --pipe sed -e "s/[[:space:]]\+/ /g" > standard.txt
C'est le code original qui fonctionne très bien mais prend beaucoup trop de temps:
sed -e "s/[[:space:]]\+/ /g" $Filetmp > standard.txt
Version parallèle GNU: 20130922
Lubuntu 14.04
Lorsque je lance cela sur un fichier aléatoire, j'ai un problème de syntaxe. Vous devez citer la commande:
cat $Filetemp | parallel --pipe 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt
Si cela ne fonctionne toujours pas pour vous, testez echo $Filetemp
(ou choisissez un fichier manuellement) ou supprimez la redirection afin que vous puissiez voir la sortie telle qu'elle se produit (juste au cas où il y aurait un problème de remplacement étrange).
Depuis la version 20140422, GNU Parallel a eu --pipepart
qui est très efficace:
parallel -a $Filetemp --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt
Et à partir de la version 20161222, vous pouvez utiliser --block -1
pour couper $Filetemp
en un bloc par lot:
parallel -a $Filetemp --block -1 --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt
Cela peut fournir plus de 1 Go/s pour chaque cœur, ce qui signifie que vous êtes probablement limité par les E/S. Vous pouvez voir si c'est le cas en regardant:
iostats -dkx 1
Si l'utilisation est de 100%, le disque constitue le goulot d'étranglement.