Найти строки в одном объекте на основе строк в другом объекте
Поиск строк в одном файле на основе строк в другом файле.
У меня есть один объект $A
с некоторыми строками, такими как:
0c7d3283-bec2-4db1-9078-ebb79d21afdf
200bc957-26dd-4e8e-aa6e-00dc357c4ac2
218e0d2a-0e8b-4a68-8136-8f5dd749a614
Я хочу найти совпадения в объекте $B
для этих строк и распечатайте строки с совпадениями в выходной файл.
Я пытался в течение недели (моя первая неделя в PowerShell:)) я пришел к:
$F = $B | ForEach-Object{ $A | Select-String -Pattern $_$ -AllMatches| Select-Object line }
но это не дает мне никаких результатов.
Кто готов мне помочь?
1 ответ
Если вы хотите сопоставить свой первый массив, с чем-то, что должно соответствовать части строки во втором массиве, вы делаете что-то вроде кода ниже:
$A = @("0c7d3283-bec2-4db1-9078-ebb79d21afdf", "200bc957-26dd-4e8e-aa6e-00dc357c4ac2", "218e0d2a-0e8b-4a68-8136-8f5dd749a614")
$B = @("Something 0c7d3283-bec2-4db1-9078-ebb79d21afdf", "Something else 200bc957-26dd-4e8e-aa6e-00dc357c4ac2", "Something also e3df3978-beb7-4545-bc48-ff40d8453be1")
foreach ($Line in $A) {
if($B -match $Line) {
$B | Where-Object {$_ -match $Line}
}
}
Сначала мы перебираем все строки в первом объекте, затем сравниваем, соответствует ли строка чему-либо во втором массиве. Если мы находим соответствие, мы проходим через массив B, чтобы найти, где совпадает линия из A.
Вы могли бы сделать этот код чертовски красивее, но это самый понятный способ, которым я могу его написать.
Старый ответ
Вы могли бы использовать Compare-Object
Командлет для сравнения двух массивов, затем используйте -IncludeEqual
переключиться, чтобы показать, где есть совпадения, а затем использовать -ExcludeDifferent
переключиться, чтобы удалить результаты, которые не совпадают. Затем возьмите этот вывод и поместите в файл. Простой тест может быть примерно таким:
$A = @("0c7d3283-bec2-4db1-9078-ebb79d21afdf", "200bc957-26dd-4e8e-aa6e-00dc357c4ac2", "218e0d2a-0e8b-4a68-8136-8f5dd749a614")
$B = @("0c7d3283-bec2-4db1-9078-ebb79d21afdf", "200bc957-26dd-4e8e-aa6e-00dc357c4ac2", "e3df3978-beb7-4545-bc48-ff40d8453be1")
(Compare-Object -ReferenceObject $A -DifferenceObject $B -ExcludeDifferent -IncludeEqual).InputObject | Out-File .\output.txt
Это должно вывести файл в текущем рабочем каталоге Shells с двумя совпадающими GUID:
0c7d3283-bec2-4db1-9078-ebb79d21afdf
200bc957-26dd-4e8e-aa6e-00dc357c4ac2
Где тот, который не соответствовал, не включен.