【问题标题】:Use Powershell to sum a column in a directory of CSVs with headers使用 Powershell 将 CSV 目录中的列与标题相加
【发布时间】:2020-10-19 16:08:51
【问题描述】:

我在一个目录中有一批 .csv 文件,其中每个特征值都有一个列,我需要求和。 .csv 文件都有相同的标题,例如 ID、SIZE、FILE_PATH 等,而“SIZE”是我需要求和的列。我找到了一个方便的单行器来逐个完成(如下),但是当我尝试使用通配符运算符循环遍历每个 CSV 时,我不断收到此错误消息:“Measure-Object: Input object ' SIZE' 不是数字。”该命令执行但只给出所有行的总计数,而不是总大小。

适用的一对一版本是:
Get-Content "file.csv" | ConvertFrom-Csv | Measure-Object "SIZE" -Sum

我尝试过的版本是:
Get-Content ".\*.csv" | ConvertFrom-Csv | Measure-Object "SIZE" -Sum

除了标题之外,列中的所有内容都是数字,但是如何通过名称“SIZE”指定列并忽略标题?

你有什么建议吗?我必须每月运行数百个 .csv 文件,因此能够一次性运行它是理想的。

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    因为Get-Content 针对多个文件会在处理之前合并来自所有文件的文本,所以您在中间得到了标题。您可以使用Get-ChildItemImport-Csv 以获得更好的体验。

    例如:

    Get-ChildItem "*.csv" | ForEach-Object { Import-Csv -Path $_.FullName } | Measure-Object -Property Size -Sum 
    

    【讨论】:

      【解决方案2】:

      试试这个

      Get-ChildItem .\*.csv |
          foreach {Import-Csv $_} |
              Measure-Object size -sum
      

      如果你只想要总和

      (Get-ChildItem .\*.csv |
          foreach {Import-Csv $_} |
              Measure-Object size -sum).sum
      

      Get-ChildItem .\*.csv |
          foreach {Import-Csv $_} |
              Measure-Object size -sum |
                  Select-Object -Expand Sum
      

      $sum = Get-ChildItem .\*.csv |
          ForEach-Object {Import-Csv $_} |
              Measure-Object -Property size -sum
      
      $sum.sum
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        • 2022-01-13
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多