如何执行算术运算以查找两个 CSV 中的值差异?
How can I perform arithmetic to find differences of values in two CSVs?
我能够区分两个 CSV 的内容 ("cells"),并使用以下函数获得最高值的输出:
Compare-Object $oldfile $latestfile -Property "UsedSize" -PassThru | select-Object "VolumeName", "UsedSize" | export-csv c:\kits\_write\snapshots\voldelta.csv -NoTypeInfo
但是,我希望得到单元格中值之间的 delta/difference。
是否可以通过算术运算找出两个 CSV 中值的差异?
为了提供背景信息,我们正在增加 NetApp 卷快照计划,例如,从 6 小时增加到 15 分钟。我想开始收集时间 N
到时间 N+15 minutes
的增量,以便在我们实施更改之前找出卷上数据(当然包括快照)的所有增长率的估计值.是的,snap delta
是为现有快照生成此数据的 Data ONTAP 方法。
谢谢
[关于评论的更新]
文件A:
VolumeName,TotalSize,AvailableSize,UsedSize
netapp_vol1,375809648400,101430421264,274379237136
文件 B:
VolumeName,TotalSize,AvailableSize,UsedSize
netapp_vol1,375809638400,101430456320,274379182080
我通过使用类似以下内容找到了 "lead":
$combocsv = $oldfile + $latestfile
$combocsv | group VolumeName | select name,@{Name="Totals";Expression={($_.group | Measure-Object -sum UsedSize).sum}}
除了我需要用 measure-object
计算差值而不是求和。我在查找如何执行此操作时遇到了一些问题。
根据解决!
$oldfilecsv = @{}
$oldfile = import-csv "C:\kits\_write\snapshots\filera_version.csv" | foreach-object { $oldfilecsv[$_.VolumeName] = [long]$_.UsedSize }
$latestfilecsv = @{}
$latestfile = import-csv "C:\kits\_write\snapshots\filera_latest.csv" | foreach-object { $latestfilecsv[$_.VolumeName] = [long]$_.UsedSize }
$deltas = @{}
foreach ( $volume in $latestfilecsv.keys ) {
$delta = $latestfilecsv[$volume] - $oldfilecsv[$volume]
$deltas.add($volume, $delta)
}
导入的 CSV 值是字符串,因此您可能需要将这些值转换为适当的类型,例如计算 属性:
$csv = Import-Csv 'C:\path\to\input.csv' |
Select-Object VolumeName, @{n='UsedSize';e={[long]$_.UsedSize}}
以上将 (string) 属性 UsedSize
替换为同名的 属性,但将字符串转换为长整型值。
但是,由于您想计算两个不同文件之间的差异,我建议将数据导入哈希表而不是直接导入 CSV:
$csv = @{}
Import-Csv 'C:\path\to\input.csv' | ForEach-Object {
$csv[$_.VolumeName] = [long]$_.UsedSize
}
这将使您能够查找任何给定卷的值。
使用不同哈希表中的输入 CSV 数据,您可以像这样轻松计算差异:
foreach ($volume in $csv1.Keys) {
$delta = $latestCsv[$volume] - $oldCsv[$volume]
#
# further processing goes here, like displaying $delta on the screen
# or putting the value in another hashtable
#
}
我能够区分两个 CSV 的内容 ("cells"),并使用以下函数获得最高值的输出:
Compare-Object $oldfile $latestfile -Property "UsedSize" -PassThru | select-Object "VolumeName", "UsedSize" | export-csv c:\kits\_write\snapshots\voldelta.csv -NoTypeInfo
但是,我希望得到单元格中值之间的 delta/difference。
是否可以通过算术运算找出两个 CSV 中值的差异?
为了提供背景信息,我们正在增加 NetApp 卷快照计划,例如,从 6 小时增加到 15 分钟。我想开始收集时间 N
到时间 N+15 minutes
的增量,以便在我们实施更改之前找出卷上数据(当然包括快照)的所有增长率的估计值.是的,snap delta
是为现有快照生成此数据的 Data ONTAP 方法。
谢谢
[关于评论的更新]
文件A:
VolumeName,TotalSize,AvailableSize,UsedSize
netapp_vol1,375809648400,101430421264,274379237136
文件 B:
VolumeName,TotalSize,AvailableSize,UsedSize
netapp_vol1,375809638400,101430456320,274379182080
我通过使用类似以下内容找到了 "lead":
$combocsv = $oldfile + $latestfile
$combocsv | group VolumeName | select name,@{Name="Totals";Expression={($_.group | Measure-Object -sum UsedSize).sum}}
除了我需要用 measure-object
计算差值而不是求和。我在查找如何执行此操作时遇到了一些问题。
根据
$oldfilecsv = @{}
$oldfile = import-csv "C:\kits\_write\snapshots\filera_version.csv" | foreach-object { $oldfilecsv[$_.VolumeName] = [long]$_.UsedSize }
$latestfilecsv = @{}
$latestfile = import-csv "C:\kits\_write\snapshots\filera_latest.csv" | foreach-object { $latestfilecsv[$_.VolumeName] = [long]$_.UsedSize }
$deltas = @{}
foreach ( $volume in $latestfilecsv.keys ) {
$delta = $latestfilecsv[$volume] - $oldfilecsv[$volume]
$deltas.add($volume, $delta)
}
导入的 CSV 值是字符串,因此您可能需要将这些值转换为适当的类型,例如计算 属性:
$csv = Import-Csv 'C:\path\to\input.csv' |
Select-Object VolumeName, @{n='UsedSize';e={[long]$_.UsedSize}}
以上将 (string) 属性 UsedSize
替换为同名的 属性,但将字符串转换为长整型值。
但是,由于您想计算两个不同文件之间的差异,我建议将数据导入哈希表而不是直接导入 CSV:
$csv = @{}
Import-Csv 'C:\path\to\input.csv' | ForEach-Object {
$csv[$_.VolumeName] = [long]$_.UsedSize
}
这将使您能够查找任何给定卷的值。
使用不同哈希表中的输入 CSV 数据,您可以像这样轻松计算差异:
foreach ($volume in $csv1.Keys) {
$delta = $latestCsv[$volume] - $oldCsv[$volume]
#
# further processing goes here, like displaying $delta on the screen
# or putting the value in another hashtable
#
}