计算IP地址的出现次数并将结果导出为CSV

Fra*_*eam 0 regex powershell parsing filtering logfile

我有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
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望输出看起来像这样.

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

Ans*_*ers 5

每当你遇到" 在条形图中出现foo计数"问题时(特别是如果条形图是CSV)通常是选择的工具:Group-Object

Import-Csv 'input.csv' |
    Group-Object src_ip -NoElement |
    Select-Object Name, Count |
    Export-Csv 'output.csv' -NoType
Run Code Online (Sandbox Code Playgroud)

如果您想要不同的列标题,请在Select-Object步骤中使用计算属性:

... | Select-Object @{n='src_ip';e={$_.Name}}, @{n='Occurrences';e={$_.Count}} | ...
Run Code Online (Sandbox Code Playgroud)

  • 不使用Group属性时,我会添加`-NoElement` (2认同)