我导入包含主键和一些数据的CSV文件,例如
key,data
1,one
2,two
3,three
4,four
5,five
我想要基于data
值的一条记录的key
字段。这就是我的工作
$db=import-csv data.csv
$data=($db|?{$_.key -eq 4}).data
是否有更智能/更优雅的方式来编写第二行?
PS。在这个时候,我坚持使用PS v2
答案 0 :(得分:1)
有更优雅的方式,但不确定性能:
# Convert CSV to Hashtable
$db = Import-CSV data.csv | Group-Object -AsHashTable -AsString -Property Key
然后你可以获得这样的值:
PS 2.0:$($db.4).Data
PS 3.0及更高版本:($db.4).Data
答案 1 :(得分:0)
如果您知道密钥是升序的,没有间隙,并且从1
开始,那么您可以按索引(从零开始):
$desiredKey = 4
$db[$desiredKey-1].data
但这似乎是一个冒险的假设,你做这件事的方式可能比这更好。
您可以构建[hashtable]
,然后执行直接查找:
$hash = @{}
$db | ForEach-Object { $hash[$_.key] = $_.data }
$db[4]