【问题标题】:How do I print out the count of unique matches with grep?如何使用 grep 打印出唯一匹配的计数?
【发布时间】:2012-04-24 15:26:43
【问题描述】:

假设我有数百万个数据包要查看,我想查看一个数据包被发送到某个端口号的次数。

以下是一些数据包:

10:27:46.227407 IP 85.130.236.26.54156 > 139.91.133.120.60679: tcp 0
10:27:46.337038 IP 211.142.173.14.80 > 139.91.138.125.56163: tcp 0
10:27:46.511241 IP 211.49.224.217.3389 > 139.91.131.47.6973: tcp 0

我想在这里查看第二个端口号:

60679、53163、6973 等

所以我可以使用:

grep -c '\.80:' output.txt

计算使用端口 80 的所有时间。但是有没有办法让它显示所有使用的端口以及在这个文件中找到它的次数。像这样的东西,最好也排序,所以我可以看到最常用的端口:

.80: - 54513
.110: - 12334
.445: - 412

【问题讨论】:

    标签: regex sorting count grep


    【解决方案1】:

    uniq -c。你会想要取出你想要的位,对结果进行排序,通过 uniq 管道,对输出进行排序。可能是这样的:

    egrep '\.[0-9]+:' output.txt | sort | uniq -c | sort -nr
    

    澄清:我在这里使用了 grep,因为不清楚您的 output.txt 格式是什么样的,但您可能希望通过cutawk 实际删除端口号位。

    编辑:要获取端口,您可以在句号上剪切一次,然后在冒号上再次剪切:

    cut -d. -f10 < output.txt | cut -d: -f1
    

    (或完成相同任务的十几种其他方法中的任何一种。)这将为您提供未排序的端口列表。那么:

    cut -d. -f10 < output.txt | cut -d: -f1 | sort | uniq -c | sort -nr
    

    【讨论】:

    • 感谢您的帮助。但我在剪裁时遇到了麻烦。有没有办法只使用正则表达式进行剪切?因为端口号每次都不在同一列和间距中。
    • Cut 不使用正则表达式。编辑您的问题并添加一些示例行,以便我们查看格式。
    • 好的,我编辑了一些例子。那你会推荐我用什么?
    • 巨大的帮助!我真的很感激
    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 2017-01-06
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多