因此,此脚本计算单词在整个文件中出现的次数。
哪个效果很好。
现在,我需要它来显示4个字符以上的每个单词出现在哪些行上。
问题是我几乎没有脚本编写经验。
向AdminOfThings致谢,以向我提供当前代码!
Function AnalyseTo-Doc
{
param ([Parameter(Mandatory=$true)][string]$Pad )
New-Item C:\destination.txt -ItemType file
$destination = "C:\destination.txt"
$filecontents = Get-Content $Pad -Raw
$words = ($filecontents | Select-String -Pattern "\b[A-Za-z]{4,}\b" -AllMatches).Matches.Value
$words | Group-Object -NoElement | Foreach-Object {
("{0},{1}" -f $_.Count,$_.Name) | Add-Content -Path $destination
}
}
AnalyseTo-Doc
答案 0 :(得分:0)
如上所述,SO不是代码编写服务。下面,我将为您提供一个示例,说明如何解决您的问题:
$s = "aaa", "bbb", "ccc"
$findings = $s | select-string "bbb"
$valAndLinenumber = $findings | Select-Object @{ l="Value"; e={ $_.matches.value}}, linenumber, line
$valAndLinenumber
输出:
Value LineNumber Line
----- ---------- ----
bbb 2 bbb
使它与脚本一起使用的适应权取决于您。
您可以在此link下找到示例。
进一步阅读:
希望有帮助。
答案 1 :(得分:0)
以下修改应该可以实现您想要的。
Function AnalyseTo-Doc
{
param ([Parameter(Mandatory=$true)][string]$Pad )
New-Item C:\destination.txt -ItemType file
$destination = "C:\destination.txt"
$filecontents = Get-Content $Pad
$words = $filecontents | Select-String -Pattern "\b[A-Za-z]{4,}\b" -AllMatches
$group = $words.Matches.Value | Group-Object -NoElement
$output = foreach ($word in $group) {
[pscustomobject]@{Count = $Word.Count
Word = $word.Name
Linenumbers = $words.where{$_.Matches.Value -eq $word.Name}.linenumber
}
}
$output | Foreach-Object {
("{0},{1},{2}" -f $_.Count,$_.Word,($_.Linenumbers -Join " ")) | Add-Content -Path $Destination
}
}
行号在输出文件中每行末尾加一个空格。您可以通过更新-Join " "
部分来更改连接字符。
答案 2 :(得分:0)
正如AnsgarWiechers所暗示的那样,Select-String返回的结构化对象具有每行匹配项。
## Q:\Test\2019\06\11\SO_56543125.ps1
Function AnalyseTo-Doc{
param ([Parameter(Mandatory=$true)][string]$Pad )
$Lines = Select-String -Path $Pad -Pattern '\b[A-Za-z]{4,}\b' -AllMatches
$Words = ForEach($Line in $Lines){
ForEach($Match in $Line.Matches){
[PSCustomObject]@{
LineNumber = $Line.LineNumber
Word = $Match.Value
}
}
}
$Words | Group-Object Word | ForEach-Object {
[PSCustomObject]@{
Count= $_.Count
Word = $_.Name
Line = $_.Group.LineNumber -join ','
}
}
}
AnalyseTo-Doc Question_SO_56543125.txt
在文件Question_SO_56543125.txt
中输入问题文本后,脚本将返回:
> Q:\Test\2019\06\11\SO_56543125.ps1
Count Word Line
----- ---- ----
1 this 1
1 script 1
1 counts 1
1 many 1
1 times 1
1 words 1
1 appear 1
1 whole 1
1 file 1
2 Which 2,3
1 works 2
...snip...
输出可以轻松保存在(csv)文件中。