如何使用 PowerShell 将列值更改为 Excel 中的行

How to change column values to rows in Excel with PowerShell

对于我为工作所做的一些测试,创建了一个 CSV 文件,其中数字全部在一行中,但有很多列。我需要将所有这些数字加在一起,然后除以列数。当你打开 Excel 和 select 全部时,excel 已经给你一个平均值。

但是,我想在 PowerShell 中自动执行此操作,但到目前为止我还无法做到这一点。我能够得到行中值的平均值,所以我的问题是以下之一:

1:如何计算所有具有值的列的平均值? 或者,
2:如何从行而不是列中的列中获取值?

从另一个 CSV 文件中,我确实得到了正确的结果,我目前使用这段代码来获取总共 1500 行的平均值。

Import-Csv "$test.csv" | Select 'Frame time' -First 1500 | Measure-object 'Frame time' -ave | Select-Object -expand Average

还有一个问题是,有没有一种方法可以使用返回的值进行计算,而不是将其输入并作为变量放入计算中?

我是 PowerShell 脚本编写的新手,我发现这类操作很难(找到)。

假设您只有一个充满数字的 csv,那么您可以只使用 Get-Content 来读取文件并提取所有存在的数字,而不是使用 Import-CSV。考虑以下输入

column1,column2,column3,column4
2,4,6,8
1,2,3,4
5,10,15,20

你可以这样做

Get-Content C:\temp\names.csv | 
    Select-Object -Skip 1 | 
    ForEach-Object{$_.Split(",")} | 
    Measure-Object -Average | 
    Select-Object -ExpandProperty Average

将文件读取为字符串数组。 Select-Object -Skip 1 是可选的,取决于文件中是否存在 header。如果您没有,请删除该行。然后将每一行在 , 上拆分。所有这些输出都被发送到 Measure-Object 以计算平均值。然后,我们使用 Select-Object 将值从 object 中分离出来,而只是 return 数据。

关于这一点,如果您希望结果供以后使用,则只需将其捕获到一个变量中即可。

 $result = Get-Content C:\temp\names.csv | 
    Select-Object -Skip 1 | 
    ForEach-Object{$_.Split(",")} | 
    Measure-Object -Average | 
    Select-Object -ExpandProperty Average