Подсчет вхождений IP-адресов и экспорт результатов в CSV

У меня есть данные в файле CSV, который выглядит так:

src_ip,dst_ip,tran_src_ip,tran_dst_ip,srczone,src_country_code,dstzone,dst_country_code
75.76.77.78,23.24.25.26,192.168.1.100,192.168.1.18,"""""WAN""""",USA,"""""LOCAL""""",USA
75.76.77.78,23.24.25.26,,192.168.1.21,"""""WAN""""",USA,"""""LOCAL""""",USA
12.13.14.15,23.24.25.26,,192.168.1.21,"""""WAN""""",USA,"""""LOCAL""""",USA
23.24.25.26,23.24.25.26,192.168.1.100,192.168.1.18,"""""WAN""""",USA,"""""LOCAL""""",USA

Я хочу иметь возможность импортировать этот файл, просмотреть значения в столбце src_ip и создать новый CSV-файл, который будет содержать столбец, показывающий src_ip и сколько раз этот адрес появлялся во входном файле.

Я нашел такой код, который может найти определенный шаблон, но он не работает для меня, когда я ввожу регулярное выражение для IP-адресов. Я также не уверен, как заставить его возвращать IP-адрес вместе с количеством вхождений для этого конкретного IP-адреса.

$regex = '\b(\w+)=([^ ]+)'    
(Select-String -Path 'input_file.csv' -Pattern $regex -AllMatches |
    Select-Object -ExpandProperty Matches).Count

В идеале я хотел бы, чтобы результат выглядел примерно так.

src_ip,Occurances
75.76.77.78,2
12.13.14.15,1
23.24.25.26,1

person FrameWork Team    schedule 09.07.2018    source источник


Ответы (1)


Всякий раз, когда вы сталкиваетесь с проблемой «подсчет вхождений foo в bar» (особенно если bar является CSV), Group-Object обычно является предпочтительным инструментом. :

Import-Csv 'input.csv' |
    Group-Object src_ip -NoElement |
    Select-Object Name, Count |
    Export-Csv 'output.csv' -NoType

Если вы хотите, чтобы разные заголовки столбцов использовали вычисляемые свойства на шаге Select-Object:

... | Select-Object @{n='src_ip';e={$_.Name}}, @{n='Occurrences';e={$_.Count}} | ...
person Ansgar Wiechers    schedule 09.07.2018
comment
Если свойство Group не используется, я бы добавил -NoElement - person ; 10.07.2018