Ich habe versucht, eine Funktion zu erstellen, die Linux Kopf emuliert:wie Streaming-Funktion in Powershell schreiben
Function head()
{
[CmdletBinding()]
param (
[parameter(mandatory=$false, ValueFromPipeline=$true)] [Object[]] $inputs,
[parameter(position=0, mandatory=$false)] [String] $liness = "10",
[parameter(position=1, ValueFromRemainingArguments=$true)] [String[]] $filess
)
$lines = 0
if (![int]::TryParse($liness, [ref]$lines)) {
$lines = 10
$filess = ,$liness + (@{[email protected]();$false=$filess}[$null -eq $filess])
}
$read = 0
$input | select-object -First $lines
if ($filess) {
get-content -TotalCount $lines $filess
}
}
Das Problem ist, dass dies tatsächlich die gesamten Inhalt gelesen wird (ob von $ filess oder von $ input lesen) und drucke dann die erste, wo ich möchte, dass ich die ersten Zeilen lese und den Rest vergesse, damit es mit großen Dateien arbeiten kann.
Wie kann diese Funktion umgeschrieben werden?
Zunächst einmal sollten Sie 'process' Block verwenden, da' end' (es implizite 'end' Block ist wie jede nicht verwenden) wird ausgeführt, nachdem alle vorherigen Befehle ihre Ausführung bereits abgeschlossen haben. Und für Tipps, wie Sie die Pipeline vorzeitig verlassen, können Sie diese [Antwort] (http://stackoverflow.com/a/34800670) verwenden. – PetSerAl