如何在管道中连接数组

13
我希望将管道中的结果连接起来。 我尝试使用-join
PS> type .\bleh.log | where { $_ -match "foo"} | select -uniq | $_ -join ','

但是这给我带来了错误:/

表达式只允许作为管道的第一个元素。

3个回答

13

你可以尝试这个:

@(type .\bleh.log | where { $_ -match "foo"} | select -uniq) -join ","

在最后一个管道符之后,您需要使用Foreach-Object(别名为%),才能使$_变量可用,但它并没有帮助,因为它仅包含单个单元格值(对于每个循环迭代)。


能不能把它保持成一行呢? - Snæbjørn
1
答案已编辑。但如果你需要一个真正的 CSV 文件,有专门的 cmdlets,比如 Export-Csv - sodawillow
我只需要复制/粘贴结果,所以上面的就是我想要的 :) - Snæbjørn

0

这段代码搜索文件中的字符“ya”,并将其作为数组返回一个唯一列表。然后,它将数组元素连接成一个由逗号分隔的字符串。

 @(type requirements.txt | where {($_).Trim() -match "ya"} | select -Unique) -join ","

0
作为替代方案,PowerShell 6.2及以上版本附带了Join-String命令。
Get-Content .\bleh.log |
    Where-Object { $_ -match 'foo' } |
    Select-Object -Unique |
    Join-String -Separator ','

一个简单但不是非常可靠的非高级功能,适用于Windows PowerShell可能是:
function pipejoin {
    @($input) -join $args[0]
}

0..10 | pipejoin ','

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接