我有一系列文档正在通过以下功能来计算每个文档中的单词出现次数。此功能可以很好地输出到控制台,但现在我想生成一个包含信息的文本文件,但文件名附加到列表中的每个单词。
我当前的控制台输出是:
"processing document1 with x unique words occuring as follows"
"word1 12"
"word2 8"
"word3 3"
"word4 4"
"word5 1"
我想要一个这种格式的分隔文件:
document1;word1;12
document1;word2;8
document1;word3;3
document1;word4;4
document1;word1;1
document2;word1;16
document2;word2;11
document2;word3;9
document2;word4;9
document2;word1;13
虽然下面的函数让我得到单词和出现的列表,但我很难弄清楚在哪里或如何插入文件名变量,以便它打印在每行的开头。MSDN 帮助不大,我尝试插入变量的大多数地方都会导致错误(见下文)
function Count-Words ($docs) {
$document = get-content $docs
$document = [string]::join(" ", $document)
$words = $document.split(" `t",[stringsplitoptions]::RemoveEmptyEntries)
$uniq = $words | sort -uniq
$words | % {$wordhash=@{}} {$wordhash[$_] += 1}
Write-Host $docs "contains" $wordhash.psbase.keys.count "unique words distributed as follows."
$frequency = $wordhash.psbase.keys | sort {$wordhash[$_]}
-1..-25 | %{ $frequency[$_]+" "+$wordhash[$frequency[$_]]} | Out-File c:\out-file-test.txt -append
$grouped = $words | group | sort count
我是否需要创建一个字符串以传递给输出文件 cmdlet?这只是我在过去几次尝试中放错地方的东西吗?我想了解为什么它也会出现在特定的地方。现在我只是在猜测,因为我知道我不知道在哪里可以out-file
实现我选择的结果。
我已经尝试使用-$docs
and来根据 powershell 帮助格式化我的命令-FilePath
,但是每次我向out-file
上面成功运行的内容添加任何内容时,都会出现以下错误:
Out-File : Cannot validate argument on parameter 'Encoding'. The argument "c:\out-file-test.txt" does not bel
ong to the set "unicode,utf7,utf8,utf32,ascii,bigendianunicode,default,oem" specified by the ValidateSet attribute. Sup
ply an argument that is in the set and then try the command again.
At C:\c.ps1:39 char:71
+ -1..-25 | %{ $frequency[$_]+" "+$wordhash[$frequency[$_]]} | Out-File <<<< -$docs -width 1024 c:\users\x46332\co
unt-test.txt -append
+ CategoryInfo : InvalidData: (:) [Out-File], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.OutFileCommand