【问题标题】:Append new entries from bash array to a txt file将新条目从 bash 数组附加到 txt 文件
【发布时间】:2011-05-10 15:12:14
【问题描述】:

情况是这样,我编写了一个小脚本来生成拒绝电子邮件的 IP 地址列表:

msgid_array=($(grep ' sendmail\[' /var/log/maillog |  
               egrep -v 'stat=(Sent|queued|Please try again later)' |  
               egrep dsn='5\.[0-9]\.[0-9]' | awk '{print $6}'))  

for z in ${msgid_array[@]}; do  
    ip_array[x++]=$(grep $z /var/log/maillog | egrep -m 1 -o 'relay=.*' |  
                    egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}')  
done

所以它的作用是查找被拒绝电子邮件的所有消息 ID 并将它们存储在 msgid_array 中。

然后使用 for 循环 grep 带有每个消息 ID 的邮件日志并过滤出发件人 IP 地址并将所有 IP 存储在 ip_array 中。

现在我打算每天运行它,让它解析昨天的日志条目,然后将结果存储在单独的 txt 文件中。

如果我的 txt 文件中有 "rejected_ip_addresses=" 条目,我怎么能简单地将任何新 IP 地址添加到现有列表中?

所以今天我运行它,条目如下所示:

rejected_ip_adresses=1.1.1.1 2.2.2.2

明天当我运行它时,数组看起来像这样,因为相同的 2 个发件人在发送电子邮件时遇到了问题,但有 2 个新发件人:

ip_array=(1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4)

所以我在 txt 中的条目现在应该是这样的,重点是每月对所有有问题的地址进行概览:

rejected_ip_adresses=1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4

感谢您的任何想法,目前我的大脑拒绝帮助我。

【问题讨论】:

    标签: arrays bash append text-files


    【解决方案1】:

    我会将条目(每行一个)附加到文件中并执行sort -u

    printf "%s\n" ${ip_array[@]} >> problem_ips.txt
    sort problem_ips.txt > tmp.txt && mv tmp.txt problem_ips.txt
    

    您可以通过将循环替换为:

    ip_array=($(printf "%s\n" ${msgid_array[@]} | grep -f - /var/log/maillog ... ))
    

    您还可以通过将多次调用grep 替换为一次调用awk 来执行相同操作,从而稍微提高速度。但是,最大的收获将是删除所有这些 grep 被多次调用的循环。

    【讨论】:

    • 我也在考虑使用 sort -u,只是还没想出最好的方法,这看起来简单实用,感谢您的优化,我总是从丹尼斯那里得到一个很好的答案:)
    • 排序命令可以通过使用 -o 开关来简化,因此该行如下所示: sort -u question_ips.txt -o problem_ips.txt
    【解决方案2】:

    可能您可以将名称和值对(我的意思是变量)输入到您的脚本中。在退出脚本之前,您可以再次重新创建名称和值对。

    Example:
    
    Variables.conf
      rejected_ip_adresses=1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4
      from_email=test@test.com
      to_email=test@test.com
    
    parse.sh
      source variable.conf
      .
      . 
      .
      <parsing logic>
      .
      .
      .
      .
      <loop to store the variables back>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      相关资源
      最近更新 更多