使用grep和GNU并行删除许多文件的行

问题描述 投票:1回答:1

我有一个目录,其中包含许多都以“ _all.txt”结尾的文件。我想删除每个文件中包含“ *”或“-”的所有行,并将它们发送到以“ _all_cleaned.txt”结尾的文件中。

现在,我正在使用如下所示的for循环:

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

我希望能够使用GNU parallel并行执行此操作,这样命令将在不同计算节点上的每个文件上执行,而不是等待一个节点连续执行所有操作。

我如何合并

grep gnu-parallel
1个回答
0
投票

如果文件位于服务器的登录目录中(即,您通过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
© www.soinside.com 2019 - 2024. All rights reserved.