2015-02-10 46 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

相關問題