所以我制作了一个包含 5 列人名的虚拟文件。现在,为了向您展示该过程将如何工作,我将向您展示文本“Ann”在任何字段中出现的频率。
$file = "C:\temp\MOCK_DATA (3).csv"
gc $file | %{$_ -split ","} | Group-Object | Where-Object{$_.Name -like "Ann*"}
不要关注代码,而是关注下面的输出。
Count Name Group
----- ---- -----
5 Ann {Ann, Ann, Ann, Ann...}
9 Anne {Anne, Anne, Anne, Anne...}
12 Annie {Annie, Annie, Annie, Annie...}
19 Anna {Anna, Anna, Anna, Anna...}
“Ann”单独出现 5 次。然而,它也是其他名称的一部分。让我们使用一个简单的正则表达式来查找所有只有“Ann”的值。
(select-string -Path 'C:\temp\MOCK_DATA (3).csv' -Pattern "\bAnn\b" -AllMatches | Select-Object -ExpandProperty Matches).Count
这将返回 5,因为 \b 用于单词边界。本质上,它只是查看逗号之间或每行的开头或结尾之间的内容。这会省略您可能拥有的“Anna”和“Annie”等结果。 Select-Object -ExpandProperty Matches 如果您在一行中有多个匹配项,那么拥有这一点很重要。
小警告
这无关紧要,但在尝试保持代码简单时,您的标头可能会与您要查找的值匹配。不太可能,这就是为什么我不考虑它的原因。如果这是可能的,那么我们可以使用Get-Content 来代替Select -Skip 1。