【问题标题】:Delete lines of many files using grep and GNU parallel使用 grep 和 GNU 并行删除许多文件的行
【发布时间】:2020-07-06 03:02:49
【问题描述】:

我有一个目录,其中包含许多以“_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 并行执行此操作,以便命令将在不同计算节点上的每个文件上执行,而不是等待一个节点连续执行所有操作。

我该如何合并

【问题讨论】:

    标签: grep gnu-parallel


    【解决方案1】:

    如果文件位于服务器上的登录目录中(即您通过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
    

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2013-07-30
      相关资源
      最近更新 更多