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

时间:2015-02-10 13:45:58

标签: excel powershell csv

对于我在工作中进行的一些测试,会创建一个CSV文件,其中所有数字都在一行上,但列数很多。我需要将所有这些数字加在一起,然后除以列数。当您打开Excel并选择全部时,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脚本的新手,我觉得这些行为很难(找到)。

1 个答案:

答案 0 :(得分:0)

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

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是可选的,取决于文件中是否存在标头。如果您没有,请删除该行。然后,对于每一行,将其拆分为,。所有输出都发送到Measure-Object以计算平均值。然后,我们使用Select-Object来打破对象的值并返回数据。

在该注释中,如果您希望稍后使用该结果,则只需要在变量中捕获它。

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