打开文本文件并计算每个 IP 被列出的次数
Open Text File and count how many times each IP is listed
我有一个包含大量 IP 地址的文本文件,每个不同的 IP 可能在文本文件中多次出现,所以我正在尝试编写(或寻求帮助编写)一个 Powershell 脚本,它可以下列:
1 - 打开文本文件,计算每个 IP 出现的次数,然后
2 - 如果总数大于 20,则将该 IP 附加到另一个名为 Banned.txt
的文件
此脚本运行后,我会手动删除文件(该文件是由另一个程序创建的),几天后,我会再次执行此脚本。
这是我最好的尝试:
$BadIP = Get-Content -Path G:\ips.txt
foreach ($ip in $BadIP) {
$matches = Select-String -InputObject $BadIP -Pattern $ip -AllMatches
$a = $matches.Matches.Count
$ip + " " + $a
}
以上代码有效,但一次又一次地显示相同的 ip。结果如下所示:
197.3.11.26 1
188.128.119.172 1
64.71.18.150 1
212.92.107.105 51
95.213.162.132 1
212.92.107.105 51
212.92.107.105 51
212.92.123.202 48
64.74.185.234 1
212.92.107.105 51
212.92.107.105 51
212.92.115.227 45
212.92.123.202 48
212.92.107.105 51
212.92.115.227 45
212.92.123.202 48
如您所见,212.92.107.105 显示了很多次。
更新:工作代码:
$BadIP = Get-Content -Path G:\ips.txt
foreach ($ip in $BadIP) {
$matches = Select-String -InputObject $BadIP -Pattern $ip -AllMatches
$a = $matches.Matches.Count
if ($a -gt 10) {
Add-Content -Path G:\NewBanned.txt -Value $ip -Force
}
}
$B = Get-Content -Path G:\NewBanned.txt | sort | Get-Unique
Set-Content -Path G:\C.txt -Value $B -Force
197.3.11.26
188.128.119.172
64.71.18.150
212.92.107.105
95.213.162.132
212.92.107.105
212.92.107.105
212.92.123.202
64.74.185.234
212.92.107.105
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
79.175.133.67
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
186.202.182.154
212.92.115.227
23.97.190.194
212.92.123.202
116.247.79.114
212.92.107.125
212.92.107.105
95.154.89.97
212.92.115.227
212.92.123.202
212.92.107.105
37.61.220.2
212.92.115.227
216.210.86.226
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
103.196.30.114
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
72.43.207.8
212.92.123.202
52.176.111.87
51.15.147.173
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
51.15.147.173
212.92.115.227
212.92.123.202
212.92.107.105
80.241.45.18
51.15.147.173
212.92.115.227
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
51.15.147.173
212.92.123.202
212.92.115.227
212.92.107.105
51.15.147.173
212.92.123.202
212.92.107.105
212.92.115.227
121.122.140.41
61.222.127.100
187.216.131.254
138.201.35.26
212.92.123.202
212.92.107.105
212.92.115.227
51.15.147.173
162.250.124.186
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
51.15.147.173
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
51.15.147.173
212.92.115.227
212.92.123.202
198.71.53.228
212.92.107.105
212.92.115.227
212.92.123.202
51.15.147.173
212.92.107.105
212.92.115.227
212.92.123.202
121.122.140.41
212.92.107.105
51.15.147.173
212.92.115.227
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
51.15.147.173
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
51.15.147.173
212.92.123.202
212.92.115.227
138.201.35.26
212.92.107.105
212.92.123.202
51.15.147.173
124.97.39.218
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
51.15.147.173
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.118.13.124
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
83.37.113.40
212.92.115.227
212.92.107.105
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
78.110.10.245
212.92.107.105
212.92.115.227
212.92.123.202
38.110.28.23
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
212.92.115.227
212.92.123.202
212.92.107.105
212.92.123.242
212.92.123.202
212.92.115.227
212.92.107.105
212.92.123.202
212.92.115.227
212.92.107.105
212.92.115.227
212.92.107.105
212.92.123.202
88.250.238.17
212.92.115.227
212.92.107.105
88.250.238.17
212.92.123.202
212.92.115.227
212.92.107.105
208.98.255.113
124.97.39.218
177.84.35.46
1.174.101.155
让 PowerShell 为您完成繁重的工作。 Group-Object
cmdlet 将相同的输入 objects 分组并自动对它们进行计数:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
Select-Object Name, Count
输出到这样的文本文件:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
ForEach-Object { '{0} {1}' -f $_.Name, $_.Count } |
Set-Content 'G:\C.txt'
像这样输出到 CSV 文件:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
Select-Object @{n='IPAddress';e={$_.Name}}, Count
Export-Csv 'G:\C.csv' -NoType
后面计算的属性只是将"Name"替换为"IPAddress"作为列标题。
我有一个包含大量 IP 地址的文本文件,每个不同的 IP 可能在文本文件中多次出现,所以我正在尝试编写(或寻求帮助编写)一个 Powershell 脚本,它可以下列: 1 - 打开文本文件,计算每个 IP 出现的次数,然后 2 - 如果总数大于 20,则将该 IP 附加到另一个名为 Banned.txt
的文件此脚本运行后,我会手动删除文件(该文件是由另一个程序创建的),几天后,我会再次执行此脚本。
这是我最好的尝试:
$BadIP = Get-Content -Path G:\ips.txt
foreach ($ip in $BadIP) {
$matches = Select-String -InputObject $BadIP -Pattern $ip -AllMatches
$a = $matches.Matches.Count
$ip + " " + $a
}
以上代码有效,但一次又一次地显示相同的 ip。结果如下所示:
197.3.11.26 1 188.128.119.172 1 64.71.18.150 1 212.92.107.105 51 95.213.162.132 1 212.92.107.105 51 212.92.107.105 51 212.92.123.202 48 64.74.185.234 1 212.92.107.105 51 212.92.107.105 51 212.92.115.227 45 212.92.123.202 48 212.92.107.105 51 212.92.115.227 45 212.92.123.202 48
如您所见,212.92.107.105 显示了很多次。
更新:工作代码:
$BadIP = Get-Content -Path G:\ips.txt
foreach ($ip in $BadIP) {
$matches = Select-String -InputObject $BadIP -Pattern $ip -AllMatches
$a = $matches.Matches.Count
if ($a -gt 10) {
Add-Content -Path G:\NewBanned.txt -Value $ip -Force
}
}
$B = Get-Content -Path G:\NewBanned.txt | sort | Get-Unique
Set-Content -Path G:\C.txt -Value $B -Force
197.3.11.26 188.128.119.172 64.71.18.150 212.92.107.105 95.213.162.132 212.92.107.105 212.92.107.105 212.92.123.202 64.74.185.234 212.92.107.105 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 79.175.133.67 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 186.202.182.154 212.92.115.227 23.97.190.194 212.92.123.202 116.247.79.114 212.92.107.125 212.92.107.105 95.154.89.97 212.92.115.227 212.92.123.202 212.92.107.105 37.61.220.2 212.92.115.227 216.210.86.226 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 103.196.30.114 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 72.43.207.8 212.92.123.202 52.176.111.87 51.15.147.173 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 51.15.147.173 212.92.115.227 212.92.123.202 212.92.107.105 80.241.45.18 51.15.147.173 212.92.115.227 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 51.15.147.173 212.92.123.202 212.92.115.227 212.92.107.105 51.15.147.173 212.92.123.202 212.92.107.105 212.92.115.227 121.122.140.41 61.222.127.100 187.216.131.254 138.201.35.26 212.92.123.202 212.92.107.105 212.92.115.227 51.15.147.173 162.250.124.186 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 51.15.147.173 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 51.15.147.173 212.92.115.227 212.92.123.202 198.71.53.228 212.92.107.105 212.92.115.227 212.92.123.202 51.15.147.173 212.92.107.105 212.92.115.227 212.92.123.202 121.122.140.41 212.92.107.105 51.15.147.173 212.92.115.227 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 51.15.147.173 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 51.15.147.173 212.92.123.202 212.92.115.227 138.201.35.26 212.92.107.105 212.92.123.202 51.15.147.173 124.97.39.218 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 51.15.147.173 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.118.13.124 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 83.37.113.40 212.92.115.227 212.92.107.105 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 78.110.10.245 212.92.107.105 212.92.115.227 212.92.123.202 38.110.28.23 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 212.92.115.227 212.92.123.202 212.92.107.105 212.92.123.242 212.92.123.202 212.92.115.227 212.92.107.105 212.92.123.202 212.92.115.227 212.92.107.105 212.92.115.227 212.92.107.105 212.92.123.202 88.250.238.17 212.92.115.227 212.92.107.105 88.250.238.17 212.92.123.202 212.92.115.227 212.92.107.105 208.98.255.113 124.97.39.218 177.84.35.46 1.174.101.155
让 PowerShell 为您完成繁重的工作。 Group-Object
cmdlet 将相同的输入 objects 分组并自动对它们进行计数:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
Select-Object Name, Count
输出到这样的文本文件:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
ForEach-Object { '{0} {1}' -f $_.Name, $_.Count } |
Set-Content 'G:\C.txt'
像这样输出到 CSV 文件:
Get-Content 'G:\NewBanned.txt' |
Group-Object |
Select-Object @{n='IPAddress';e={$_.Name}}, Count
Export-Csv 'G:\C.csv' -NoType
后面计算的属性只是将"Name"替换为"IPAddress"作为列标题。