gpt4 book ai didi

linux - 在 bash 脚本中使用多个 awk 实例通过白名单来清洗文件,麻烦

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:03 25 4
gpt4 key购买 nike

我需要使用静态白名单来清洗一组文件,我遇到了问题,因为当我小规模使用以下命令时,它们似乎可以工作,但是当我尝试从 bash 脚本中并行运行它们时,我的文件中得到的结果不一致。并非所有条目都按照我的预期被删除,这意味着脏数据仍然在我的目标文件中需要清洗。我需要一个解决方案,这是一个必须解决的改变生活的问题,如果有人能给我提示,那将非常有帮助。

(顺便说一句,我将白名单分成多个副本,希望它能解决问题,但没有)

这里的文件每个纯文本域名超过 100,000 行

Whitelist.txt 超过 25,000 个条目

 google.com
1.google.net
websitetowhitelist.org
and so on...

示例:

#!/bin/bash
# Whitewash script washes blacklists against whitelist to remove domains that should never be blacklisted.
#
#
echo 'Washing file1 blacklist with whitelist.txt ...'
cat 'file1.acl' | awk '{ m=0 ; while ((getline row < "whitelist.txt") == 1) { if (row == $0) { m=1 ; break } } ; close("whitelist.txt") ; if (m == 0) { print $0 }}' > 'file1.out' &
echo 'Washing file2 blacklist with whitelist.txt ...'
cat 'file2' | awk '{ m=0 ; while ((getline row < "whitelist.txt") == 1) { if (row == $0) { m=1 ; break } } ; close("whitelist.txt") ; if (m == 0) { print $0 }}' > 'file2.out' &
echo 'Washing file3 blacklist with whitelist.txt ...'
cat 'file3.acl' | awk '{ m=0 ; while ((getline row < "whitelist.txt") == 1) { if (row == $0) { m=1 ; break } } ; close("whitelist.txt") ; if (m == 0) { print $0 }}' > 'file3.out' &

最佳答案

对于这种大小的文件,通常最好查看 block 而不是单行,或者尝试 perl 或其他语言。

因此,另一个解决方案可能是:

  • 标记白名单和脏文件
  • 按键的顺序对它们进行排序
  • 删除重复项

    sed 's/$/;a/' < whitelist > whitelisttagged
    sed 's/$/;b/' < dirtyfile > dirtyfiletagged
    cat whitelisttagged dirtyfiletagged > alltagged
    sort alltagged > allsorted
    cat allsorted | awk -F';' 'BEGIN {a=""} /;a$/{a=$1} /;b$/ { if ($1 != a) {print $1}}'

您会注意到 awk 没有那么复杂。

关于linux - 在 bash 脚本中使用多个 awk 实例通过白名单来清洗文件,麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com