Удалить текст из динамического файла на основе данных в статическом файле - PullRequest
1 голос
/ 02 ноября 2011

У меня есть скрипт powershell, который генерирует данные, которые отправляются в файл Dynamic.txt. Сценарий генерирует список серверов, которые соответствуют очень конкретным критериям. Список затем обрабатывается. Однако у меня есть около 20 серверов, которые соответствуют критериям, которые мне не нужны в списке.

Это мой статический список. Я могу удалить серверы из списка с помощью команды Foreach-Object {$_ -replace "xxx", ""}. Однако это грязно, и я хочу более чистый код. Как я могу удалить данные из Dynamic.txt на основе данных в Static.txt?

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Чтобы удалить записи из одного текстового файла на основе записей в другом текстовом файле,

$dynamic = Get-Content .\Dynamic.txt
$static = Get-Content .\Static.txt

$dynamic| where { $static -notcontains $_ }| Set-Content .\Dynamic.txt
1 голос
/ 02 ноября 2011

Вы можете использовать командлет Compare-Object.

Командлет Compare-Object сравнивает два набора объектов. Один набор объектами является набор ссылок, а другой набор - набор разностей.

Вот пример кода.

Содержимое colors.txt:

red
green
blue
pink

Содержимое notcolors.txt:

green

Команда и выход:

compare-object (Get-Content "notcolors.txt") (Get-Content "colors.txt") | FL


InputObject   : red
SideIndicator : =>

InputObject   : blue
SideIndicator : =>

InputObject   : pink
SideIndicator : =>

Простой выбор InputObject из результатов должен дать вам правильный список серверов.

Это PowerShell, есть и другие способы. Вы можете использовать фильтр где-нибудь в скрипте, который может выглядеть примерно так (возможно, вам придется переключаться между частями $ _. Name и Get-Content, чтобы получить правильную логику.)

...| Where-Object {$_.Name -notmatch (Get-Content serverlist.txt)} | ...
0 голосов
/ 27 апреля 2017

Скажите, что содержимое diff.txt должно быть равно разнице fileX и fileY, затем используйте следующий код

$fileA = 'fileA.txt'
$fileB = 'fileB.txt'
$diff = 'diff.txt'

$fileAContent = Get-Content $fileA -Encoding UTF8
$fileBContent = Get-Content $fileB -Encoding UTF8
$fileAContent| where { $fileBContent -notcontains $_ }| Set-Content $diff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...