Удалить строки из 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