Удалите строки из многих файлов, используя grep и GNU параллельно - PullRequest
1 голос
/ 25 марта 2020

У меня есть каталог со многими файлами, которые заканчиваются на "_all.txt". Я хочу удалить все строки в каждом из этих файлов, содержащих либо «*», либо «-», и отправить их в файлы, оканчивающиеся на «_all_cleaned.txt».

Прямо сейчас я использую для l oop следующим образом:

for file in *_all.txt;
do
filename=$(echo $file | cut -d '_' -f 1)
grep -vwE "(*|-)" ${file}> "${filename}_all_cleaned.txt"
done

Я хотел бы иметь возможность делать это параллельно, используя GNU параллельно, так что команда будет выполнена в каждом файле на другом вычислительном узле, вместо того, чтобы ждать, пока один узел сделает все подряд.

Как включить

1 Ответ

0 голосов
/ 09 апреля 2020

Если файлы находятся в директории входа в систему на серверах (то есть директории, которую вы получаете ssh server1 pwd):

parallel -Sserver1,server2 'grep -vwE "(*|-)" {} > {=s/.txt$/_cleaned.txt=}' ::: *.txt

Если это та же директория относительно $HOME (например, /home/me/my/dir):

parallel --wd . -Sserver1,server2 'grep -vwE "(*|-)" {} > {=s/.txt$/_cleaned.txt=}' ::: *.txt

Если это /different/dir:

parallel --wd /different/dir -Sserver1,server2 'grep -vwE "(*|-)" {} > {=s/.txt$/_cleaned.txt=}' ::: *.txt
...