【问题标题】:Comparing CSV with different structure比较具有不同结构的 CSV
【发布时间】:2016-04-25 23:11:18
【问题描述】:

我正在尝试编写脚本来比较具有不同结构的两个 CSV 文件。我有一个名为cisearch.csv 的文件和第二个名为export.csv 的文件。

cisearch.csv:

名称,P1,P2,P3,P4,P5
服务器1,100,,,,
服务器2,100,100,,,
server3,100,,,,
服务器4,100,50,70,80,80

export.csv:

主机;驱动器
server1;驱动器 C: 磁盘使用情况
server2;驱动器 C: 磁盘使用情况
server2;驱动器 D: 磁盘使用情况
server3;驱动器C:磁盘使用情况
server4;驱动器 C:磁盘使用情况
server4;驱动器 D:磁盘使用情况
server4;驱动器 E: 磁盘使用情况
server4;驱动器 F:磁盘使用情况
server4;驱动器 G:磁盘使用情况

从脚本中,我只需要输出 cisearch.csv 上但不在 export.csv 上的项目。例如:

server4 驱动器 F:
server4 驱动器 G:

我知道驱动器 C 的这一点:但不知道其他...

$csvI = Import-Csv c:\workspace\cisearch.csv
foreach($line in $csvI ){
    $hostname = $line.Name
    $cDrive = $line.P1
    $dDrive = $line.P2
    $eDrive = $line.P3
    $fDrive = $line.P4
    $gDrive = $line.P5

    if ($cDrive -gt 0) {
        Select-String -pattern "$hostname;Drive C: Disk Usage" C:\workspace\export.csv | out-null
    } else {
        Write-Host Drive C: on $hostname non exist
    }
}

【问题讨论】:

  • 我不清楚您的选择标准是什么。驱动器的数量(假设第一个 CSV 中的字段 P1P5 代表驱动器)在两个文件中是相同的,那么为什么必须列出服务器 4 的驱动器 F: 和 G:,而其他的不是?
  • cisearch.csv 是来自 CMDB 的报告:P1-P5 是添加到服务器的分区 - server1 只有一个驱动器,server2 有两个分区,server3 只有一个,server4 有 5 个分区。我需要将此与来自 Nagios 的报告的第二个文件进行比较,该文件是受监控的。我需要找到未监控的 P1-P5 和服务器名称...
  • 我想,我需要:如果 dDrive 为空白 - 无效值,继续 eDrive... 如果 dDrive 的值大于 0,请尝试 select-string...
  • 请解释(在您的问题中)您如何从两个输入文件到概述的输出(否则更正您的示例)。我完全不清楚你的标准是什么。

标签: csv powershell compare


【解决方案1】:

然后呢:

function compareE {
    if ($eDrive -gt 0 ) {
        Select-String -pattern "$hostname;Drive E: Disk Usage" C:\workspace\NagiosExport.csv 
    }else{
        Write-Host Drive E: on $hostname not monitored 
    }
}

if($eDrive -gt 0) { 
    compareE 
    }

【讨论】:

  • 这如何回答您的问题?如果您需要提供更多信息/说明:请编辑您的问题。
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多