【问题标题】:Group a csv duplicate column对 csv 重复列进行分组
【发布时间】:2021-12-23 11:29:59
【问题描述】:

我有点坚持分组和导出具有日常机器状态重复值的 csv 列。每台机器只有两个重复值。

hostname  status   
ABC         up      
DEF         up      
GHI         down    
ABC         down    
DEF         up      
GHI         up      

我希望得到

hostname  status_morning   status_evening
ABC          up               down 
DEF          up                 up
GHI          down               up
$groups = import-csv .\machine-status.csv | group-object hostname
foreach($group in $groups){
Select-Object @{Name='Hostname'   ;Expression={$_.Values[0]}},
               @{Name='status_morning';Expression={$_.Values[1]}},
              @{Name='status_evening' ;Expression={$_.Values[2]}}

}

【问题讨论】:

  • 你需要一些东西进入选择对象;也许$group.group | Select-Object ...
  • 你可以从group-object->group-object hostname | select-object ...通过管道进入Select-Object。您不需要 foreach 语句。您的表达式将从Group 属性中检索数据。所以分别使用$_.Group[0].Hostname$_.Group[0].Status$_.Group[1].status
  • 能否保证GroupInfo 集合保持任何已知的顺序?如何确保status_morningstatus_evening 按预期顺序分组?是否有机会看到任何主机的第三个条目?
  • @AdminOfThings.. 我得到了下面的import-csv .\host.csv | group-object hostname | Select-Object $_.Group[0].Hostname Cannot index into a null array. At line:1 char:1 + import-csv .\hoist.csv | group-object hostname | Select-Object $_.Gr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArray
  • @stringfellow .. 主机条目将只有两个重复的主机条目,第一个是早上状态,最后一个是晚上状态。

标签: powershell powershell-3.0


【解决方案1】:

肯定还有其他简单的方法,但是下面的代码行得通。

$csv = Import-csv C:\PS\stack.csv | Group-Object 'HostName'
$csv | Select-Object 'Name',@{ n='Morning_status';e={$_.Group.status[0]}},@{ n='Evening_status';e={$_.Group.status[1]}}

【讨论】:

  • 感谢 user2670623。它奏效了,非常感谢
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2021-11-16
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2018-03-01
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多