【问题标题】:Compare 2 CSV Files data of more than 2 coloumns比较超过 2 列的 2 个 CSV 文件数据
【发布时间】:2020-04-13 14:27:55
【问题描述】:

我有 2 个 CSV 文件。每个文件具有与下面脚本中提到的相同的列名。

我正在尝试将New.csvOld.csv 进行比较。为了比较,我在Old.csv 中查找每个Alertname,在New.csv 中找到匹配的警报,然后从Timeraised 列中检查警报时间。如果警报存在且警报时间相差 3 小时以上,则不显示数据。但如果少于 3 小时,则显示警报并创建 Output.csv

示例 -

OLD.csv File

警报名称、警报描述、主体名称、严重性、引发时间
内存警报,事件描述:在 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 比较两个文件上的 Alerts,它不能同时比较 2 个不同的变量,这意味着我无法比较 Alertname 和 Timeraised at由于限制,一次来自下面的代码。谁能指导我完成这个。

$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

【问题讨论】:

  • 您发布的 csv 示例根本不像逗号分隔值。请发布有效的示例,这样想帮助的人就不必猜测了。
  • 您能在记事本中打开您的 CSV 文件并向我们发送一些已编辑行吗?您发送的不是普通的 CSV
  • 附上CSV供参考。
  • 所以现在您向我们展示了 csv 作为图像的链接...请再次编辑问题并将 csv 文件的前几行添加为格式化的 text跨度>
  • 完成,如果可以的话。

标签: powershell csv


【解决方案1】:

这应该可行。确保添加属性timeraised

// previous code 
$Results =Compare-Object $Old $New -property "AlertName","timeraised" -passThru |             
Where-Object { $_.SideIndicator -eq '=>' } 
// rest of code

【讨论】:

  • 但是我必须比较 Timeraised 值的差异,我怎样才能实现上面根本不起作用。
  • 你能告诉我你的结果吗这是我的结果`````` AlertName AlertDescription PrincipalName Severity TimeRaised memory Alert abc 03-04-2020 9:24
  • 我的观点是我们不能同时比较 2 个属性,即使我们这样做也会比较相同的值,但我不想将 Timeraised 与相同的值进行比较,我需要检查timeraised值差异是否超过3小时。
  • 你能上传新旧 csv 我会测试正确的数据进行比较
  • 我添加了图像,但文件我看不到任何选项。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
相关资源
最近更新 更多