如何在PowerShell中找到X个匹配项?

时间:2016-10-25 10:23:13

标签: powershell powershell-v4.0

我有一个看起来像这样的文本文件:

&123456/Some Data/741852
&654321/Some Data/963852
&987654/Some Data/325698
&123456/Some Data/789456
&321654/Some Data/789456
&987654/Some Data/471852
&123456/Some Data/987654
&987654/Some Data/845786
...

我正在寻找三个或更多匹配输出到文件中。所需的输出如下:

File1.txt

&123456/Some Data/741852
&123456/Some Data/789456
&123456/Some Data/987654

File2.txt

&987654/Some Data/325698
&987654/Some Data/471852
&987654/Some Data/845786

下面是我试图查找计数的函数,但还没有弄清楚如何输出到文件:

function GetUserCounts($fileName) {
    $userCounts = @{}
    switch -regex -file $fileName {
        '&([0-9]{6})+' {
            $userName = $matches[1]
            $userCounts[$userName] = [int]$userCounts[$userName] + 1
        }
    }
    $userCounts.GetEnumerator() | select Name, Value
}

GetUserCounts .\FinalTest.txt

2 个答案:

答案 0 :(得分:3)

使用Group-Object按行的特定部分对结果进行分组:

Get-Content 'C:\path\to\your.txt' | Group-Object { ($_ -split '/')[0] }

然后过滤包含3个或更多匹配的组:

... | Where-Object { $_.Count -ge 3 }

并将每个组写入文件:

... | ForEach-Object { $i++; $_.Group | Set-Content "File$i.txt" }

答案 1 :(得分:0)

试试这个

 $i=0
 import-csv C:\temp\campaigns.txt -Delimiter "/" -Header id, data, num | group id | % {$i++; $_.Group | export-csv "C:\temp\file$i.txt"  -NoTypeInformation -Delimiter "/" }