如何用PowerShell构建可统计重复IP的CSV输出脚本
PowerShell脚本:统计IP重复次数并更新CSV
以下是实现需求的脚本,每次运行时会基于已有CSV数据更新IP的Total计数:
$file = "你的CSV文件路径.csv" # 初始化IP计数哈希表 $ipCount = @{} # 如果CSV文件存在,读取现有数据并加载到哈希表 if (Test-Path $file) { $existingData = Import-Csv -Path $file foreach ($entry in $existingData) { $ipCount[$entry.IP] = [int]$entry.Total } } # 处理本次要添加的IP列表 foreach ($test in $IPs) { $currentIP = $test.IP # 如果IP已存在,计数+1;不存在则初始化为1 if ($ipCount.ContainsKey($currentIP)) { $ipCount[$currentIP] += 1 } else { $ipCount[$currentIP] = 1 } } # 将哈希表转换为PSCustomObject数组并排序 $updatedIPData = $ipCount.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ IP = $_.Key Total = $_.Value } } | Sort-Object -Property IP # 导出到CSV(覆盖原有文件,因为是汇总更新) $updatedIPData | Export-Csv -Path $file -NoTypeInformation -Encoding UTF8
关键说明:
- 哈希表存储计数:用
$ipCount哈希表快速查找和更新每个IP的计数,比遍历数组效率更高。 - 读取已有数据:脚本先检查CSV是否存在,存在则读取现有
Total值,确保计数是累积的。 - 处理新IP:遍历本次的
$IPs列表,对每个IP更新计数,不存在的IP初始化为1。 - 重新生成CSV:最后将哈希表转换为对象数组,排序后导出覆盖原文件,确保CSV里始终是每个IP的最新累积计数。
补充:如果需要保留每次添加的操作记录(即每行对应一次添加),同时维护一个汇总的Total列,逻辑会有所不同,但根据需求描述,上述脚本实现的是「每个IP一行,Total记录该IP被添加的总次数」的效果。
内容的提问来源于stack exchange,提问作者greenGob19
相关产品推荐
相关产品推荐

