windows - 计算文件中未知字符串最常见的出现次数

标签 windows powershell batch-file dns logfile-analysis

我有一个大文件,里面全是这样的行......

19:54:05 10.10.8.5 [SERVER] Response sent: www.example.com. type A by 192.168.4.5
19:55:10 10.10.8.5 [SERVER] Response sent: ns1.example.com. type A by 192.168.4.5
19:55:23 10.10.8.5 [SERVER] Response sent: ns1.example.com. type A by 192.168.4.5

我不关心任何其他数据,只关心“响应已发送:”之后的内容 我想要一份最常见域名的排序列表。 问题是我不会提前知道所有的域名,所以我不能只搜索字符串。

使用上面的示例,我希望输出符合

ns1.example.com (2)
www.example.com (1)

...其中 ( ) 中的数字是该事件的计数。

在 Windows 上我可以如何/使用什么来执行此操作?输入文件是 .txt - 输出文件可以是任何东西。理想情况下是一个命令行过程,但我真的迷路了,所以我对任何事情都很满意。

最佳答案

Cat 有点冒险,所以让我们试着帮点忙。这是一个 PowerShell 解决方案。如果您对其工作方式有疑问,我鼓励您研究各个部分。

如果您的文本文件是“D:\temp\test.txt”,那么您可以这样做。

$results = Select-String -Path D:\temp\test.txt -Pattern "(?<=sent: ).+(?= type)" | Select -Expand Matches | Select -Expand Value
$results | Group-Object | Select-Object Name,Count | Sort-Object Count -Descending

使用你的输入你会得到这个输出

Name             Count
----             -----
ns1.example.com.     2
www.example.com.     1

因为有正则表达式,所以我保存了一个 link that explains how it works .

请记住,SO 当然是一个帮助程序员和编程爱好者的网站。我们将空闲时间投入到一些人为此获得报酬的地方。

关于windows - 计算文件中未知字符串最常见的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29761164/

相关文章:

html - Powershell Web 抓取 SSL/TLS 问题

Windows 批处理文件将输出重定向到带有日期/时间的日志文件

.net - 暂停 GACUTIL.exe 列表

windows - 在 C :\ProgramData\中写入时的权限/所有者问题

c# - PowerShell 模块是否更接近 C# 中的类的 "thing"?

powershell - 拖放到 Powershell 脚本

windows - 如何使用正确的工作目录从 BAT 文件启动 PowerShell 脚本?

loops - 逐行解析文件并在批处理中的 for 循环中递增变量

c++ - CreateProcessWithLogonw 返回不支持的函数

php - 如何在 Windows 中添加对 PHP 的 zend 调试器支持?