如何在 Shell 脚本中创建循环来执行特定任务?

如何在 Shell 脚本中创建循环来执行特定任务?

我正在尝试清理一个巨大的电子邮件数据库,但是当我使用以下 Grep 命令时,出现“内存耗尽”错误。

pv "Suppresion-List.txt" | grep -vf <(sed 's/^/^/; s/$/$/' EMAILS.txt) > RESULT.txt

这两个文件中的数据集非常庞大,就像超过 500 万封电子邮件一样,因此 Linux 服务器给了我“内存耗尽”错误。

因此我决定将文件分成几个小文件,每个文件包含 10,000 封电子邮件进行处理。

split -d -l 10000 EMAILS.txt Segment

如何创建带有循环的 Bash 脚本,其中它按递增顺序检查创建的分割文件,并从创建的第一个文件开始处理 - 例如:Segment00

pv "Suppresion-List.txt" | grep -vf <(sed 's/^/^/; s/$/$/' Segment00) > RESULT.txt

...然后自动循环相同的命令并替换命令中的第二个段文件 - 例如:Segment01

pv "Suppresion-List.txt" | grep -vf <(sed 's/^/^/; s/$/$/' Segment01) > RESULT.txt

...循环一直进行到最后一段然后最终终止。

你能帮我写这样的 Bash 脚本吗?我不知道如何在循环中自动按升序替换分段文件以编写 shell 脚本。

请帮忙。

答案1

例如,您可以使用for这样的循环:

for i in Segment??
do
pv "Suppresion-List.txt" | grep -vf <(sed 's/^/^/; s/$/$/' "$i") >> RESULT.txt
done

这将对所有文件执行命令Segment<symbol><symbol>并将结果添加到RESULT.txt

根据评论,命令应该是:

pv "RESULT-1.txt" | grep -vf <(sed 's/^/^/; s/$/$/' "$i") >> RESULT.txt

相关内容