Использование "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.
Другие вопросы по тегам