【问题标题】:Powershell Grouping of csv import filecsv导入文件的Powershell分组
【发布时间】:2018-05-07 14:19:43
【问题描述】:

希望我只是错过了一些简单的东西......

我有一个类似的 csv 文件:

Employee ID, Entry Date, Product Code,Amount Due
0001,20/11/2017,A001,10
0001,20/11/2017,Q003,13
0001,20/11/2017,H001,8
0002,20/11/2017,P003,12
0002,20/11/2017,A001,7

我想要的输出与此类似:

0001;<some header text>;200171120
A001;10
Q003;13
H001;8
0002;<some header text>;200171120
P003;12
A001;7

因此每个详细信息部分都按与其相关的员工 ID 分组

在使用 import-csv 后,我尝试通过管道传递组对象(“员工 ID”)......但我无法让它正常工作

非常感谢任何帮助!

【问题讨论】:

  • 您提到您尝试过使用group-object 但不要显示您尝试过的代码,最好显示您的代码(即使它不起作用)以便我们知道您至少已经尝试过解决这个问题,并且不只是期望我们为您编写所有代码。
  • 我了解 - 我最初确实剪切并粘贴了我的几次尝试,但由于它只是稍微混淆了帖子而被删除(如果我最终这样做,我不希望我的代码元素被更正错误的方式!)

标签: file powershell csv import


【解决方案1】:

我认为这可以满足您的需要:

$CSV | Group-Object 'Employee ID' | ForEach-Object {

    $EntryDate = (Get-Date ($_.Group.'Entry Date' | Select -First 1) -F 'yyyyMMdd')

    "{0};<some header text>;{1}" -f $_.Name, $EntryDate

    ForEach ($Item in $_.Group) {
        "{0},{1}" -f $Item.'Product Code',$Item.'Amount Due'
    }
}

说明:

  • 使用 Group-Object 按员工 ID 对结果进行分组,然后使用 ForEach-Object 遍历集合。
  • 从组中的第一个条目中获取条目日期,将其转换为带有Get-Date 的日期对象,然后将其格式化为年/月/日(这部分假设您不关心是否有其他/不同集合中的日期)。
  • 输出您想要的标头字符串,使用 {0},{1} 作为通过 -f 传递的变量的占位符(有多种方法可以做到这一点,但这似乎最适合您的方案)。
  • 使用ForEach 遍历包含分组项的Group 属性。再次使用字符串替换以您想要的格式输出产品代码和应付金额字段。

【讨论】:

  • 非常感谢马克 - 我现在要试试(也 - 非常感谢额外的解释!)
  • 嗨,马克。我已经尝试过了,PowerShell 提示我输入 Process[0]。我添加了一个 write-host $file 来检查它实际上是否有问题的文件,但似乎无法超越这个.....我可能在这里遗漏了一些非常明显的东西
  • 您是否将{ 放在ForEach-Object 之后换了一行?因为ForEach-Object 无法做到这一点。
  • (指定 $files= get-childitem ) $csvfile=import-csv $file $csvfile | group-object "报告提交日期" | ForEach-Object { $EntryDate = (Get-Date ($_.Group.'Report Submit Date' | Select -First 1) -F 'yyyyMMdd') write-host "Entry Date : " $EntryDate "{0};;{1}" -f $_.Name, $EntryDate ForEach ($_.Group 中的$Item) { "{0},{1}" -f $Item.'Employee ID',$Item .'到期金额'} }
  • 以防万一这对任何人都有帮助 - 我的打字一定很差: ForEach ($Item in $_.Group ) { if ($item.'Journal Account Code' -ne '') { " L;5;;0;0;{2},{0},{1}" -f $Item.'Employee ID',$Item.'Report Entry Description', $item.'Journal Account Code' } } - 这似乎有效
猜你喜欢
  • 2021-05-16
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多