Найти строки в одном объекте на основе строк в другом объекте - PullRequest
0 голосов
/ 27 декабря 2018

Поиск строк в одном файле на основе строк в другом файле.

У меня есть один объект $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 Ответ

0 голосов
/ 27 декабря 2018

Если вы хотите сопоставить свой первый массив, с чем-то, что должно совпадать с частью строки во втором массиве, вы делаете что-то вроде кода ниже:

$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

Где тот, который не сделалне совпадает.

...