2015-02-10 69 views
0

对于我为工作所做的某些测试,会在一行中创建一个CSV文件,但其中包含大量列。我需要将所有这些数字加在一起,然后除以列数。当你打开Excel并选择全部时,excel已经给你一个平均值。如何使用PowerShell将列值更改为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脚本相当陌生,而且我发现这些操作相当困难(要查找)。

+0

所以你想在csv的所有数字的平均值? csv只包含数字? – Matt 2015-02-10 13:53:30

回答

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 
+0

这就像一个魅力。 非常感谢! :) – 2015-02-11 08:07:08

相关问题