如何用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的序号命名,启用注释里的计数器代码即可。
解决的问题
- 关联文本块与所属域名:用域名作为文件名,直接对应所属段;也可通过计数器实现序号命名。
- 输出到独立文件:每次遇到新域名时关闭上一个文件,避免资源泄漏,保证每个块写入单独文件。
- 提取前置内容:通过标记位区分前后段,自动完成
file3.txt的生成。
内容的提问来源于stack exchange,提问作者humbleStrength
相关产品推荐
相关产品推荐

