0

我是powershell的新用户。我有 30 个文件,其中包含三列的相似数据集。列数据是 Lat Long 值。它还有一个标题,如下所示。但是,这些列没有标记。

示例数据如下所示:

* , Water Column, Depth Averaged
   437416.450  3350091.975        0.000
   437379.500  3350133.550        0.000
   437583.925  3350278.375        0.000
   437545.475  3350312.800        0.000
   437768.700  3350492.125        0.000
   437730.675  3350525.050        0.000
   437919.750  3350668.850        0.000
   437883.350  3350701.150        0.000
   438072.475  3350836.850        0.000
   438039.500  3350871.075        0.000
   438221.250  3350960.400        0.000
   438189.300  3351005.500        0.000
   438381.025  3351048.025        0.000
   438346.900  3351107.250        0.000
   438588.600  3351155.800        0.000
   438548.000  3351225.825        0.000
   438802.400  3351278.925        0.002
   438753.750  3351354.150        0.001
   439000.525  3351414.850        0.013
   438946.625  3351488.475        0.009
   439181.000  3351557.950        0.064
   439126.725  3351626.025        0.048
   439361.600  3351708.700        0.277
   439308.550  3351773.525        0.227

我想计算同一文件夹中所有文件的每一行的平均值。基本上,第一行将有来自 30 个文件的平均 30 个数据点。我认为powershell可能可以用一个简单的算法来做。

我在 stackoverflow 上发现了一个类似的帖子,使用 awk 从多个文件中计算平均值,但我不明白它是如何实现的。

任何人都可以帮助我了解 Powershell 如何实际计算多个文件中同一列的平均值吗?我想创建一个具有相似列的新文件;纬度和平均。

谢谢

贾巴巴

4

1 回答 1

1

肯定有更有效的方法,但这里有一个:

$results=@{}

#assuming your files are tab delimited and named position1.csv, position2.csv ...:
ls c:\temp\position*.csv | foreach
    {
    get-content $_.fullname | foreach
    {
        $slices=$_.split("`t")
        #verify we have our 3 columns
        if( $slices.count -eq 3)
        {
            #create an hash table with latitude-longitude as key
            $key=$slices[0]+"-"+$slices[1]

            if( $results.count -ne 0 -and $results.GetEnumerator().name -contains $key ) {
                $results[$key]+=$slices[2]
            }
            else{
                $results[$key]=@($slices[2])
            }
        }
    }
}

$results.GetEnumerator().name |%{
   "{0}`t{1}`t{2}" -f ($_.split("-")[0]) , ($_.split("-")[1]) , ($results[$_] | Measure-Object -Average).Average
}
于 2013-02-04T07:28:23.953 回答