我有一个输入csv文件,其中的列包含类似于以下示例的信息:
805265
995874
805674
984654
332574
339852
我想基于前2个字符将唯一值提取到数组中,因此使用上面的示例我的结果将是:
80,99,98,33
我如何使用PowerShell实现这一目标?
答案 0 :(得分:22)
使用Select-Object
和参数-unique
:
$values =
'805265',
'995874',
'805674',
'984654',
'332574',
'339852'
$values |
Foreach-Object { $_.Substring(0,2) } |
Select-Object -unique
如果需要转换为int,则只需将其转换为[int]
:
$ints =
$values |
Foreach-Object { [int]$_.Substring(0,2) } |
Select-Object -unique
答案 1 :(得分:15)
我会使用Group-Object
cmdlet:
Import-Csv foo.csv | Group {$_.ColumnName.Substring(0,2)} Count Name Group ----- ---- ----- 2 80 {805265, 805674} 1 99 {995874} 1 98 {984654} 2 33 {332574, 339852}
答案 2 :(得分:1)
您可以使用哈希表:
$values = @(805265,995874,805674,984654,332574,339852)
$ht = @{}
$values |foreach {$ht[$_ -replace '^(..).+','$1']++}
$ht.keys
99
98
33
80
答案 3 :(得分:0)
您可以使用包含前两个字符的项目创建一个新数组,然后使用Select-Item
为您提供这样的唯一项目:
$newArray = @()
$csv = import-csv -Path C:\your.csv
$csv | % {
$newArray += $_.YourColumn.Substring(0,2)
}
$newArray | Select-Object -Unique
答案 4 :(得分:0)
另一种替代使用Select-Object -unique
的方法是使用Get-Unique cmdlet(或其别名gu
,请参见detailed description here),如下所示:
$values = @(805265,995874,805674,984654,332574,339852)
$values | % { $_.ToString().Substring(0,2) } | Get-Unique
# or the same using alias
$values | % { $_.ToString().Substring(0,2) } | gu