似乎 While 循环不会产生可以在管道中继续的输出。我需要处理一个大(很多 GiB)文件。在这个简单的例子中,我想提取第二个字段,对其进行排序,然后只获取唯一值。我对 While 循环和通过管道插入事物有什么不了解?

在 *NIX 世界中,这将是一个简单的:

cut -d "," -f 2 rf.txt | sort | uniq

在 PowerShell 中,这不会那么简单。

源数据。
PS C:\src\powershell> Get-Content .\rf.txt
these,1,there
lines,3,paragraphs
are,2,were

剧本。
PS C:\src\powershell> Get-Content .\rf.ps1
$sr = New-Object System.IO.StreamReader("$(Get-Location)\rf.txt")

while ($line = $sr.ReadLine()) {
    Write-Verbose $line
    $v = $line.split(',')[1]
    Write-Output $v
} | sort

$sr.Close()

输出。
PS C:\src\powershell> .\rf.ps1
At C:\src\powershell\rf.ps1:7 char:3
+ } | sort
+   ~
An empty pipe element is not allowed.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : EmptyPipeElement

最佳答案

使它比需要的更复杂一些。您有一个没有标题的 CSV。以下应该工作:

Import-Csv .\rf.txt -Header f1,f2,f3 | Select-Object -ExpandProperty f2 -Unique | Sort-Object

关于powershell - While 循环不产生管道输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40010992/

10-14 00:56