You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用awk提取Bind DNS统计文件多段内容并分别输出到文件

解决方案:用Awk处理Bind DNS统计文件

可以直接通过Awk命令一次性实现所有需求,以下是完整命令及解释:

awk '
# 处理++ Per Zone Query Statistics ++之前的内容,输出到file3.txt
/^\+\+ Per Zone Query Statistics \+\+$/ {
    close("file3.txt")
    in_zone_section = 1
    next
}
!in_zone_section {
    print > "file3.txt"
    next
}

# 处理域名分隔块,输出到对应域名命名的文件
/^\[.*\]$/ {
    # 关闭上一个域名的输出文件
    if (out_file != "") close(out_file)
    # 提取域名(去掉前后的[])
    domain = substr($0, 2, length($0)-2)
    # 生成输出文件名,用域名命名更直观
    out_file = domain ".txt"
    # 如果要按file1、file2顺序命名,替换成下面两行:
    # file_num++
    # out_file = "file" file_num ".txt"
    next
}
in_zone_section && out_file != "" {
    print > out_file
}
' sample_data.txt

关键功能说明

  • 提取前置内容到file3.txt:
    用in_zone_section标记是否进入域名统计段,未进入时所有行写入file3.txt,遇到目标行后关闭该文件并切换标记,停止写入。
  • 按域名分割文本块到独立文件:
    匹配到[域名]格式的行时,通过substr提取域名(去掉首尾方括号),生成对应输出文件;后续行直到下一个[域名]行,都会写入当前文件,自动跳过分隔符本身。如果需要按file1.txt、file2.txt的序号命名,启用注释里的计数器代码即可。

解决的问题

  1. 关联文本块与所属域名:用域名作为文件名,直接对应所属段;也可通过计数器实现序号命名。
  2. 输出到独立文件:每次遇到新域名时关闭上一个文件,避免资源泄漏,保证每个块写入单独文件。
  3. 提取前置内容:通过标记位区分前后段,自动完成file3.txt的生成。

内容的提问来源于stack exchange,提问作者humbleStrength

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:22:14