我按日期将csv排序为:
15.02.2019;pc1;5;
15.02.2019;pc2;0;
16.02.2019;pc3;2;
16.02.2019;pc1;0;
17.02.2019;pc2;2;
18.02.2019;pc1;0;
18.02.2019;pc1;1;
18.02.2019;pc2;1;
我想按日期更新具有价值的PC。必须是这样的:
pc2;1
pc1;1
pc3;2
我的代码:
$info=Import-Csv 'my_file.txt' -Header date,pc,value -Delimiter ';'
$deadline = (Get-Date).AddDays(-30)
$datas=$info | Where-Object {($_."date" -as [DateTime]) -gt $deadline} | Sort-Object {$_."date" -as [DateTime]} -Descending| Sort-Object -property pc -unique
,输出为:
date pc value
---- -- -----
18.02.2019 pc1 0
18.02.2019 pc2 1
16.02.2019 pc3 2
我如何获得第一个最新的PC机智值?
答案 0 :(得分:0)
这似乎可以满足您的要求。 [咧嘴]
唯一有点奇怪的是...
Group-Object
通过.PC
属性值对项目进行聚类这是代码...
# fake reading in a CSV file
# in real life, use Import-CSV
$InStuff = @'
15.02.2019;pc1;5;
15.02.2019;pc2;0;
16.02.2019;pc3;2;
16.02.2019;pc1;0;
17.02.2019;pc2;2;
18.02.2019;pc1;0;
18.02.2019;pc1;1;
18.02.2019;pc2;1;
'@ | ConvertFrom-Csv -Delimiter ';' -Header Date, PC, Value
$EU_DatePattern = 'dd.MM.yyyy'
$Deadline = [datetime]::Now.Date.AddDays(-30)
$Results = $InStuff |
ForEach-Object {
# my date format is yyyy-MM-dd, so the "-as [datetime]" fails
$_.Date = [datetime]::ParseExact($_.Date, $EU_DatePattern, $Null)
$_
} |
Where-Object {
$_.Date -gt $Deadline
} |
Sort-Object -Property Date, Value |
Group-Object -Property PC |
ForEach-Object {
[PSCustomObject]@{
PC = $_.Name
# the very last item in the ".Group" array will be
# - the newest
# - have the highest ".Value"
Value = $_.Group[-1].Value
}
}
$Results
输出...
PC Value
-- -----
pc2 1
pc1 1
pc3 2
就个人而言,我会认真考虑保留每个项目的日期。