Powershell - 尝试比较两列的对象并写出差异

时间:2018-02-12 17:19:19

标签: powershell

希望你能帮忙!我一直在尝试使用compare-object命令,取得了不同程度的成功,但并不像我需要的那样。我开始认为也许比较不是答案。

我有两个CSV文件:RESULTS1和RESULTS2

RESULTS1有几个带标题的列......

DATE DAY    LETTER  CAR         NUMBER  NEW

RESULTS2有两列带标题......

CAR COLOUR

这是我想要实现的输出......仅使用CAR列,从RESULTS1中识别汽车并从RESULTS2中的CAR列中删除它们(例如,如果福特列在两个CSV中,请不要不要在输出中显示它。输出将列出CAR列中剩余的汽车。我仍然需要打印(作为输出CSV)以下四列...(或者至少,今天的日期,日期和CAR)。

DATE        DAY  LETTER CAR

1 个答案:

答案 0 :(得分:0)

# put this script in the same folder as the 2 csv files
$results1 = (Get-ChildItem | where name -Match "RESULTS1.csv").FullName
$results2 = (Get-ChildItem | where name -Match "RESULTS2.csv").FullName
$csv1 = Import-Csv $results1 # imports the RESULTS1.csv
$csv2 = Import-Csv $results2 # imports the RESULTS2.csv
$cars1 = @() # car names from 1st csv
$cars2 = @() # car names from 2nd csv
foreach ($line in $csv1)
{$cars1 += ($line.CAR).Trim()}
foreach ($line in $csv2)
{$cars2 += ($line.CAR).Trim()}
$unique = Compare-Object $cars1 $cars2
$unique_cars = ($unique).InputObject # unique cars

$results3 = @()
foreach ($line in $csv2) {foreach ($car in $cars1) 
    { if ($line -notcontains $car) {if ($results3 -notcontains $line) {$results3 += $line} } }
} $results3 

我用我的2个csv文件用相同的标题测试了这个脚本。你可以改变

if ($line -notcontains $car)

if ($line -contains $car)

如果你想要相反的结果