这是我正在使用的脚本,传入的文件大约是500mb
$file=$args[0]
If ($args[1] -eq 'response') {
$results = Select-String -Path $file -Pattern "(?<=sent: ).+(?= type)" | Select -Expand Matches | Select -Expand Value
}
If ($args[1] -eq 'blocked') {
$results = Select-String -Path $file -Pattern "(?<=: ).+(?= ->)" | Select -Expand Matches | Select -Expand Value
}
If ($args[1] -eq 'clients') {
$results = Select-String -Path $file -Pattern "(?<=:\d\d ).+(?= \[)" | Select -Expand Matches | Select -Expand Value
}
$results | Group-Object | Select-Object Name,Count | Sort-Object Count -Descending
有没有更快的方法来获取相同的数据?我决不会以任何方式与PowerShell结婚。
答案 0 :(得分:1)
我为select-string
交换Get-Content
,ReadCount
为1000-5000,然后使用-match
作为数组运算符来对齐生成的行数组。将字符串匹配提供给哈希表累加器以获取计数。
未经测试。
$file=$args[0]
$ht = @{}
If ($args[1] -eq 'response') {
$results = Get-Content $file -ReadCount 1000 |
foreach-object {
$_ -match "(?<=sent: ).+(?= type)" |
ForEach-Object { $ht[$_]++ }
}
}
If ($args[1] -eq 'blocked') {
$results = Get-Content $file -ReadCount 1000 |
foreach-object {
$_ -match "(?<=: ).+(?= ->)"|
ForEach-Object { $ht[$_]++ }
}
}
If ($args[1] -eq 'clients') {
$results = Get-Content $file -ReadCount 1000 |
foreach-object {
$_ -match "(?<=:\d\d ).+(?= \[)"|
ForEach-Object { $ht[$_]++ }
}
}
$results.GetEnumerator() | Sort-Object Value -Descending