Удалить строки из file1, которые существуют в file2 в Powershell

У меня есть file1.txt, который содержит:

строка 1
line2
line3
строка4

Я хочу удалить из file1.txt все строки, которые существуют в другом file2.txt:

line3
line2

Результат должен быть:

строка 1
строка4

Я пытался использовать эту команду, но она работает, только если у меня есть одна строка в file2.txt:

Get-Content C:\file1.txt | Where-Object {$_ -notmatch $(get-content C:\file2.txt)} 

Примечание: я не хочу сравнивать 2 файла, чтобы увидеть, совпадают ли они.

Любая идея? Я довольно новичок в powershell.

2 ответа

Решение

Следующий фрагмент кода показывает два разных способа достижения одинакового результата:

$filebefore="$env:TEMP\beforerestart.txt"    # change to match your circumstances
$file_after="$env:TEMP\after_restart.txt"    # detto

### Compare-Object way
$array = Compare-Object $(Get-Content $filebefore) $(Get-Content $file_after)
$array | where {$_.SideIndicator -eq "<="} | 
              Format-Table -Property InputObject -AutoSize -HideTableHeaders

### -NotIn operator way
$(Get-Content $filebefore) | 
     Where-Object {$_ -notIn $(Get-Content $file_after)} 

Compare-Object хорош для получения разницы между двумя файлами. Вот пример кода для выполнения того, что вы просили.

$file1 = Get-Content C:\temp\file1.txt
$file2 = Get-Content C:\temp\file2.txt
$Diff = Compare-Object $File1 $File2
$LeftSide = ($Diff | Where-Object $_.SideIndicator -eq '<=').InputObject
$LeftSide | Set-Content C:\temp\file3.txt
Другие вопросы по тегам