似乎 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/