2015-06-30 2 views
2

Я пытаюсь найти решение PowerShell для удаления строк из файла A, которые аналогичны в файле B. Compare-Object $A $B сравнивает, но как я могу удалить элементы?Удаление похожих строк из двух файлов

Файл

yahoo.com 
google.com 
stackoverflow.com 
facebook.com 
twitter.com 

Файл B

stackoverflow.com 
facebook.com 

После сравнения: файл А

yahoo.com 
google.com 
twitter.com 

ответ

2

Вы можете удалить содержимое файла B из файла А с чем-то вроде это:

$ref = Get-Content 'C:\path\to\fileB.txt' 

(Get-Content 'C:\path\to\fileA.txt') | 
    ? { $ref -notcontains $_ } | 
    Set-Content 'C:\path\to\fileA.txt' 
0

Вы можете попробовать одну строки:

Get-Content 'FileA.txt','FileB.txt' | Group-Object | where-Object {$_.count -eq 1} | Foreach-object {$_.group[0]} | Set-Content 'FileC.txt' 

или с использованием псевдонимов:

gc 'FileA.txt','FileB.txt' | Group | where {$_.count -eq 1} | % {$_.group[0]} | Set-Content 'FileC.txt' 

Сначала вы получите все линии, то группа те же самое, вы выбираете уникальные из них и положить в файл.

0

PowerShell и простота, идти рука об руку, и я не вижу простоты в этих ответах. Ваша первоначальная мысль верна: Compare-Object Командлет - это путь.

diff $fileA $fileB | ? sideindicator -eq '<=' # v4

Результат может по трубопроводу (или перенаправлены) в файл.

+0

Ваше решение не заполнено. '$ fileA' и' $ fileB' должны быть содержимым соответствующих файлов, и (что более важно) вам нужно расширить свойство InputObject после фильтра, чтобы получить желаемый результат. –

Смежные вопросы