对于我在工作中进行的一些测试,会创建一个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脚本的新手,我觉得这些行为很难(找到)。
答案 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