Использование "Compare-Object" приводит к неправильному форматированию
В настоящее время у меня есть два массива полных имен. Один содержит данные, считанные из текстового файла, а другой - из файла CSV. Я пытаюсь вернуть списки имен, которые появляются в обоих списках, и которые появляются только в отдельных списках. Для файла CSV PowerShell изначально хотел разместить "Name="
перед каждым предметом, но я использовал $formattedName = $csvFile -replace "Name=",""
чтобы избавиться от этого. Я должен также упомянуть, что Name
заголовок для этого столбца. На данный момент, если я вызываю переменную $formattedName
, он возвращает список имен без Name=
перед ними (иначе как в формате txt, если отформатировать для сравнения).
Теперь при попытке использовать Compare-Object
Я столкнулся с проблемой. Мой код гласит:
Compare-Object -ReferenceObject $txtFile -DifferenceObject $formattedName -IncludeEqual
Теперь при запуске этой команды PowerShell все еще помещает Name=
перед каждым элементом для файла CSV, независимо от того, что я просто отформатировал его, чтобы не делать этого. Мой конечный результат - два списка, один из которых содержит все элементы из txt-файла, а другой содержит все элементы из CSV-файла. Там нет двух совпадающих значений, потому что Steven
это не то же самое, что Name=Steven
, Пример вывода:
Steven =>
Name=Steven <=
Как я могу исправить это? Я правильно использую это?
1 ответ
Без правильных примеров как вашего CSV-файла, так и текстового файла, из вашего вопроса, я думаю, я могу понять, что ваш CSV выглядит примерно так:
"Surname","Name"
"Seagal","Steven"
"Rambo","John"
"Schwarzenegger","Arnold"
Глядя на вывод, который вы показали, я понимаю, что текстовый файл - это просто набор (первых) имен, каждое в отдельной строке, например:
Steven
Sylvester
John
Чтобы сравнить их, вам нужно отфильтровать только Name
столбец из вашего CSV-файла, поэтому он будет соответствовать массиву, который вы читаете из текстового файла.
(Вы действительно говорите: "Я должен также упомянуть, что Name - это заголовок для этого столбца".)
Попробуйте это тогда:
# import the .csv file and extract only the 'Name' column from it as string array
$csv = (Import-Csv -Path "D:\blah.csv").Name
# read the .txt file which apparently contains only firstnames, each on a separate line
$txt = Get-Content -Path "D:\names.txt"
Compare-Object -ReferenceObject $txt -DifferenceObject $csv -IncludeEqual
Выполнение этого на файлах примеров, которые я дал, вывод:
InputObject SideIndicator
----------- -------------
Steven ==
John ==
Arnold =>
Sylvester <=
куда
- "Стивен" и "Джон" появляются в обоих файлах,
- "Арнольд" находится только в файле CSV и
- "Сильвестр" находится в текстовом файле, но не в CSV.