Откройте текстовый файл и посчитайте, сколько раз указан каждый IP - PullRequest
0 голосов
/ 07 июня 2018

У меня есть текстовый файл с МНОЖЕСТВОМ 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

1 Ответ

0 голосов
/ 08 июня 2018

Пусть PowerShell сделает всю тяжелую работу за вас.Командлет Group-Object группирует идентичные объекты ввода и автоматически подсчитывает их:

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

Вычисляемое свойство в последнем просто заменяет «Имя» на «IP-адрес» в качестве заголовка столбца.

...