Ich brauche Hilfe formatieren der Ausgabe mit PowerShell-cmdlet Out-File
Habe ich eine Reihe von belegen, die durch die folgende Funktion entwickelt, um count Wort vorkommen in jedem Dokument. Diese Funktion funktioniert die Ausgabe auf der Konsole, aber jetzt möchte ich eine text-Datei erstellt containting die Informationen, aber mit dem Datei-Namen angehängt, um jedes Wort in der Liste.
Meine aktuelle Ausgabe in der Konsole ist:
"processing document1 with x unique words occuring as follows"
"word1 12"
"word2 8"
"word3 3"
"word4 4"
"word5 1"
Ich soll eine durch Trennzeichen getrennte Datei in diesem format:
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
Während die Funktion unten wird mir die Listen von Wörtern und Begebenheiten, ich habe eine harte Zeit, herauszufinden, wo oder wie fügt man den Dateinamen variabel, so dass es druckt am Beginn jeder Zeile. MSDN wurde weniger als hilfreich, und die meisten der Orte, die ich versuchen, legen Sie die variable zu einem Fehler führen (siehe unten)
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
Muss ich einen string übergeben an das cmdlet out-file? ist das nur etwas, das ich habe setzen an der falschen Stelle auf den letzten paar versucht? Ich würde gerne verstehen, WARUM es in einem bestimmten Ort, als auch. Jetzt bin ich nur raten, weil ich weiß, ich habe keine Ahnung, wo die out-file
zu erreichen, meine gewählten Ergebnisse.
Habe ich versucht, die Formatierung meiner Befehl per powershell helfen, mit den -$docs
und -FilePath
, aber jedes mal, wenn ich etwas hinzufügen, um die out-file
oben, das erfolgreich verläuft, bekomme ich die folgende Fehlermeldung:
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schrieb die meisten des Codes. Sie sollte nutzen Objekte, um die es leichter machen, formatieren, wie Sie wollen. Diese spaltet sich auf "Platz" und-Gruppen zu Wörtern zusammen. Versuchen Sie dies:
Gibt es, wie Sie gebeten(Dokument;word;count). Wenn Sie möchten documentname zu gehören Verlängerung, änderung
$file.BaseName
zu$file.Name
. Testoutput:PSObject
Liste alles auf, und verwenden Sie dannExport-CSV -delimiter ";" -notypeinfo
zu Holen Sie sich die Ausgabe? Das wäre effizienter, aus einem I/O-Perspektive (und unter Umgehung der pipeline), nur schriftlich aus, um die Datei einmal.Method invocation failed because [System.Object[]] doesn't contain a method named 'Split'.
At C:\users\x46332\desktop\cgc\counts.ps1:15 char:34
+ (Get-Content $file).Split <<<< (" ",
[System.StringSplitOptions]::RemoveEmptyEntries) | Group-Object | % {
+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Irgendwelche Ideen? Gibt es eineinclude
Zugriff auf eine Bibliothek-Klasse?(Get-Content $file).-split(" ", [System.StringSplitOptions]::RemoveEmptyEntries) | Group-Object
Split
. Ich habe es geändert um den Inhalt zu speichern, um Speicher erst jetzt[System.Object[]] doesn't contain a method named split
an oder in der Nähe von$content.Split...
. irgendwelche anderen Ideen? FWIW, ich bin mit PS 2.0; das kann sein mein Problem.$content.split
, aber Sie müssen kopiert den verbuggten Update 😉 Es ist jetzt getestet auf der PS2.0 so sollte es funktionierenEtwas anderen Ansatz:
Out_File
hae, waren erfolglos. Läuft ohne Fehler, aber dir ist nichts zu überprüfen. Wo würden Sie empfehlen, ich meineOut-File
? Ich dachte, in der Nähe der ` join ';"...Versuchen Sie dies:
Wenn Sie möchten, um diese in eine Funktion könnte man es so machen:
-append
ist nicht verfügbar für mich (ich bin mit v2.0)' Sind Sie sich bewusst von Problemumgehungen für die PS2.0 zu Lesen, eine Reihe von Dateien, und fügen Sie die Ergebnisse?output.csv
. Aber als workaround könnten Sie versuchen, so etwas wie| ConvertTo-Csv -Delimiter ";" -NoTypeInfo | Out-File output.csv -Append
.