【问题标题】:Counting Occurrences of IP Addresses & Exporting Results to CSV计算 IP 地址的出现次数并将结果导出到 CSV
【发布时间】:2018-07-09 20:28:31
【问题描述】:

我的 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""""",美国,"""""本地""""",美国 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""""",美国,"""""本地""""",美国 23.24.25.26,23.24.25.26,192.168.1.100,192.168.1.18,"""""WAN""""",美国,"""""本地""""",美国

我希望能够导入该文件,查看 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,发生次数 75.76.77.78,2 12.13.14.15,1 23.24.25.26,1

【问题讨论】:

    标签: regex powershell parsing filtering logfile


    【解决方案1】:

    每当您遇到“barfoo 的出现次数”问题(特别是如果 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}} | ...
    

    【讨论】:

    • 不使用 Group 属性时,我会添加-NoElement
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 2021-12-27
    • 1970-01-01
    • 2013-10-03
    • 2021-11-13
    • 2018-01-02
    • 2016-11-10
    • 2021-10-25
    相关资源
    最近更新 更多