借助Awk从nslookup提取域名NS记录并规范输出格式
批量提取域名NS记录的修正方案
问题分析
你当前的脚本存在两个核心问题:
- 域名丢失/位置错乱:原脚本仅输出处理后的NS记录,未将域名与对应记录拼接,导致输出结果缺少域名标识,无法一一对应。
- NS记录被强制排序:脚本中使用了
sort -u,会自动对NS记录按字母排序,不符合你保留原始记录顺序的需求。
修正后的命令
while read -r domain; do # 提取并格式化NS记录,保留原始顺序 ns_records=$(nslookup -type=ns "$domain" 2>/dev/null | awk '/nameserver =/ {sub(/nameserver = /, ""); print $1}' | tr '\n' ',' | sed 's/,$//') # 输出域名+NS记录的目标格式 echo "$domain,$ns_records" done < dom.txt
关键改进点
- 保留域名关联:明确将循环读取的
$domain与NS记录拼接后输出,确保每行开头是对应域名。 - 移除强制排序:删除了
sort -u,保留NS记录的原始返回顺序。 - 简化输出处理:用一次
awk完成NS记录的提取与清理,替代原脚本中多次sed和awk的冗余操作。 - 屏蔽错误干扰:添加
2>/dev/null屏蔽nslookup的错误输出(如域名解析失败的提示),避免污染结果。
可选调整
如果需要对NS记录去重但不排序,可以将提取NS的部分修改为:
ns_records=$(nslookup -type=ns "$domain" 2>/dev/null | awk '/nameserver =/ {sub(/nameserver = /, ""); print $1}' | awk '!seen[$0]++' | tr '\n' ',' | sed 's/,$//')
这里用awk '!seen[$0]++'实现去重且保留原始顺序。
内容的提问来源于stack exchange,提问作者Chris Melladay
相关产品推荐
相关产品推荐

