Powershell更改数据记录器中的采样率CSV文件



我有来自数据记录器的csv数据,该数据记录器每秒而不是每15分钟收集一次信息,我制作了一个脚本,每900个条目导出一次。该脚本适用于较小的csv文件(高达80mb(。但我有一个3.6GB的文件,它不起作用。

我在网上查了一下,找到了更好的方法来提高速度(没有.net,也没能让stream.reader工作(。

这是脚本:

$file = Import-Csv z:csvinput_file.csv -Header A,B,C,D,E,F
$counter = 0
ForEach ($item in $file) 
{
$counter++
If($counter -lt 900)
{
}
Else{
Write-Output “$item” | Out-File "z:csvoutput_file.csv" -Append
$counter=0
}
}

任何想法/优化都将不胜感激。

谢谢。

您可以跳过将其作为CSV读取,而只将其作为文本读取。然后一次循环900次,并输出这些行。

$file = Get-Content z:csvinput_file.csv -ReadCount 1000
For($i=0; $i -le $file.count;$i=$i+900){
$file[$i] | Add-Content z:csvoutput_file.csv
}

我相信可能还有其他优化可以进行,但这是加快速度的简单方法。

编辑:好的,所以-ReadCount的行为与我预期的有点不同。当设置为0或1以外的数字时,它将创建一个字符串数组数组。所以,基本上是[array[string[]]],在这一点上有两个选项。。。要么使用-ReadCount 0一次读取整个文件,要么一次读取900行,只输出每组中的第一行,然后直接通过管道传递给Set-Content

Get-Content z:csvinput_file.csv -ReadCount 900 | %{$_[0]} | Set-Content z:csvoutput_file.csv

因此,这将一次将文件读入内存900行,然后只将每个系列的第一行通过管道,并将其输出到输出文件。

最新更新