如何使用 PowerShell 将列值更改为 Excel 中的行
How to change column values to rows in Excel with PowerShell
对于我为工作所做的一些测试,创建了一个 CSV 文件,其中数字全部在一行中,但有很多列。我需要将所有这些数字加在一起,然后除以列数。当你打开 Excel 和 select 全部时,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 脚本编写的新手,我发现这类操作很难(找到)。
假设您只有一个充满数字的 csv,那么您可以只使用 Get-Content
来读取文件并提取所有存在的数字,而不是使用 Import-CSV
。考虑以下输入
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
是可选的,取决于文件中是否存在 header。如果您没有,请删除该行。然后将每一行在 ,
上拆分。所有这些输出都被发送到 Measure-Object
以计算平均值。然后,我们使用 Select-Object
将值从 object 中分离出来,而只是 return 数据。
关于这一点,如果您希望结果供以后使用,则只需将其捕获到一个变量中即可。
$result = Get-Content C:\temp\names.csv |
Select-Object -Skip 1 |
ForEach-Object{$_.Split(",")} |
Measure-Object -Average |
Select-Object -ExpandProperty Average
对于我为工作所做的一些测试,创建了一个 CSV 文件,其中数字全部在一行中,但有很多列。我需要将所有这些数字加在一起,然后除以列数。当你打开 Excel 和 select 全部时,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 脚本编写的新手,我发现这类操作很难(找到)。
假设您只有一个充满数字的 csv,那么您可以只使用 Get-Content
来读取文件并提取所有存在的数字,而不是使用 Import-CSV
。考虑以下输入
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
是可选的,取决于文件中是否存在 header。如果您没有,请删除该行。然后将每一行在 ,
上拆分。所有这些输出都被发送到 Measure-Object
以计算平均值。然后,我们使用 Select-Object
将值从 object 中分离出来,而只是 return 数据。
关于这一点,如果您希望结果供以后使用,则只需将其捕获到一个变量中即可。
$result = Get-Content C:\temp\names.csv |
Select-Object -Skip 1 |
ForEach-Object{$_.Split(",")} |
Measure-Object -Average |
Select-Object -ExpandProperty Average