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

如何用Shell将批量IP的Whois查询结果按单IP单行存入CSV

问题原因

whois查询结果经过rs -T转置后本身会输出多行内容,原有脚本没有处理中间换行符,所以单个IP的查询结果会被拆分为多行写入CSV文件。

可行解决方案

基础修正版脚本(串行执行,适合小批量IP)

# 先写入自定义表头,可根据实际需要调整字段内容
echo "ip,inetnum,netname,country,status,descr,admin_c,tech_c,abuse_mailbox,last_modified,source" > output.csv

while read -r ip; do
  # 处理单IP whois结果:先替换所有换行符为空格避免拆行,再做格式转换,最后统一补换行
  whois "$ip" | grep ':' | tr -d ':' | tr '\n' ' ' | rs -T | tr -s ' ' ',' | tr -d '\n'
  echo ""
done < "ip.txt" >> output.csv

核心修改点

  • 提前写入CSV表头,无需后续手动添加
  • 处理单IP结果时先把所有换行替换为空格,保证转置后的内容连续
  • 单IP所有内容处理完成后再统一添加换行符,确保每个IP的结果只占一行
  • 给变量$ip添加引号,符合Shell脚本编写规范,避免异常字符报错

优化版脚本(并行执行,适合9000个IP的批量场景)

串行执行9000次whois查询耗时过长,可通过xargs开启并行查询提升效率,以下示例同时运行10个查询进程:

# 先写入自定义表头
echo "ip,inetnum,netname,country,status,descr,admin_c,tech_c,abuse_mailbox,last_modified,source" > output.csv

# 并行查询,-P参数后面的数字是同时运行的进程数,可根据自身网络情况调整
cat ip.txt | xargs -P 10 -I {} sh -c 'whois "{}" | grep ":" | tr -d ":" | tr "\n" " " | rs -T | tr -s " " "," | tr -d "\n"; echo ""' >> output.csv
注意事项
  • 若遇到whois查询频率限制被封IP,可在循环中添加sleep 1命令增加查询间隔
  • 不同注册局返回的whois字段顺序可能不同,若需要固定列顺序,建议用awk单独提取每个指定字段,而非直接转置全部结果,可避免CSV列错位问题
  • 若字段内容本身包含逗号,建议给每个字段外层包裹双引号,避免CSV解析异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:06:05