PowerShell: сравнить конкретные столбцы файлов CSV и вернуть всю строку различий
У меня есть 2 файла CSV, которые я хотел бы сравнить. У них обоих есть несколько столбцов разных данных, но у них также есть столбец с IP-адресами. Назовите их $ log1 и $ log2
Я пытаюсь сравнить файлы. Если в $ log2 найден IP-адрес из $ log1, я хотел бы получить выходной файл, содержащий всю строку данных из совпадения $ log2...
Когда я использую:
Compare-Object -Property 'IP address' -ReferenceObject $log1 -DifferenceObject $log2
Он возвращает только столбец "IP-адрес" и SideIndicator.
Я думаю, что я не туда лаю, кто-нибудь может дать какой-нибудь совет?
3 ответа
Я бы попробовал другой подход:
$log1,$log2 | group-object -Property 'IP address' | where {$_.count -eq 2}
В результате вы найдете group
собственность с двумя линиями.
Msgstr "Попробуйте добавить флаг -PassThru к вашей команде." - Дэйв Секстон
Это работает. Я экспортировал результаты в CSV и отсортировал их по SideIndicator при открытии файла (не думаю, что вы можете заставить PS сортировать по SideIndicator).
Спасибо, Дейв.
Вероятно, есть больше способов сделать это, как отмечали другие, но это достигло моей цели.
Этот скрипт будет сравнивать ваши csv-файлы и извлекать данные для каждого найденного двойного IP-адреса.
#import your csv files
$csv1 = Import-Csv "C:\Users\Admin\Desktop\csv\csv1.csv"
$csv2 = Import-Csv "C:\Users\Admin\Desktop\csv\csv2.csv"
#Compare both csv files (.ip corresponds to your column name for your ip address in the csv file )
$compare = Compare-Object $csv1.ip $csv2.ip -IncludeEqual | ? {$_.SideIndicator -eq "=="}
if ($compare) {
foreach ($ip in $compare.InputObject) {
Write-Output "IP $ip exist in both csv files"
}
}
Else
{
Write-Output "Double ip not found"
}