web-dev-qa-db-fra.com

Essayer d'utiliser GNU Parallèle avec sed

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

6
Roboman1723

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).

5
Oli

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.

0
Ole Tange