powershell - 比较超过 2 列的 2 个 CSV 文件数据
问题描述
我有 2 个 CSV 文件。每个文件具有与下面脚本中提到的相同的列名。
我正在尝试New.csv
与Old.csv
. 为了比较,我查找每个Alertname
in Old.csv
,在 中找到匹配的警报New.csv
,然后从Timeraised
列中检查警报时间。如果警报存在且警报时间相差 3 小时以上,则不显示数据。但如果少于 3 小时,则显示警报并创建Output.csv
。
示例-
警报名称、警报描述、主体名称、严重性、引发时间 内存警报,事件描述:在 xyz 服务器上发现内存问题,ABC,错误,13-04-2020 06:47 磁盘空间警报,事件描述:在 xyz1 服务器上发现磁盘空间问题,ABS,错误,13-04-2020 06:31
OLD.csv 包含如下警报:
Alertname: Memory Alert
TimeRaised: 03-04-2020 06:23
New.csv 包含如下警报:
Alertname: Memory Alert
TimeRaised: 03-04-2020 9:24
Output.csv
由于时差超过 3 小时,我不希望显示该警报。如果少于 3 小时,请将其包含在Output.csv
.
我的工作- 我只能根据 Alertname 比较两个文件上的警报,它不能同时比较 2 个不同的变量,这意味着由于限制,我无法从下面的代码中一次比较 Alertname 和 Timeraised。谁能指导我完成这个。
$path= "C:\CSV"
$Old = import-csv $path\Old.csv # Original file
$New = import-csv $path\New.csv # New ALert File
$Results =Compare-Object $Old $New -property AlertName -passThru | Where-Object { $_.SideIndicator -eq '=>' }
$Array = @()
Foreach($R in $Results)
{
If( $R.sideindicator -eq "=>" )
{
$Object = [pscustomobject][ordered] @{
AlertName = $R.AlertName
AlertDescription = $R.AlertDescription
PrincipalName = $R.PrincipalName
Severity = $R.Severity
TimeRaised = $R.TimeRaised
}
$Array += $Object
}
}
#Display results in console
$Array | Export-Csv $path\output1.csv -NoTypeInformation
解决方案
这应该有效。确保添加属性timeraised
// previous code
$Results =Compare-Object $Old $New -property "AlertName","timeraised" -passThru |
Where-Object { $_.SideIndicator -eq '=>' }
// rest of code
推荐阅读
- android - 使用 Jetpack 导航组件在一个屏幕上显示多个片段
- ios - 从 Native iOS 向 React Native 发送自定义数据类型
- excel - 按名称访问工作表,包括 ThisWorkbook
- javascript - 每次单击跨度时如何为 div 运行函数?
- css - Bootstrap 编译默认样式和自定义样式
- c# - TemplateColumn 按钮命令绑定在 Syncfusion DataGrid 中不起作用
- vue.js - 如何对 vue.js 进行多重过滤
- python - 时间数据“2020-07-09T00:00:00+05:30”与格式“yyyy-MM-dd'T'HH:mm:ssZ”不匹配
- r - R中的可变“类似列表的对象?
- php - 如何从未知数量的数组 PHP 中构建一个数组 [字符串]