Удалить строку, если термин найден в столбце CSV - PullRequest
1 голос
/ 21 марта 2019

Мне нужно удалить строку из таблицы, если я нахожу определенный тип адреса электронной почты в своей таблице CSV.Есть несколько полей электронной почты, но я хочу сделать это только для одного столбца электронной почты, а не для любого, что, как я думаю, в настоящее время будет делать код ниже.

Как я могу указать это?

$data = foreach ($line in Get-Content D:\Data\info.csv) {
    if ($line -Like '*@LS*' -or $line -Like '*@gmail*') {
    } else {
        $line
    }
}
$data | Set-Content D:\Data\info.csv -Force

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Используйте фильтр Where-Object:

$file = 'D:\Data\info.csv'
(Get-Content $file) | Where-Object {
    $_ -notlike '*@LS*' -and $_ -notlike '*@gmail*'
} | Set-Content $file

Если вы хотите проверить определенное поле вместо всей строки, используйте Import-Csv / Export-Csv вместо Get-Content / Set-Content:

$file = 'D:\Data\info.csv'
(Import-Csv $file) | Where-Object {
    $_.FOO -notlike '*@LS*' -and $_.FOO -notlike '*@gmail*'
} | Export-Csv $file -NoType

Заменить FOO фактическим именем поля.

Вместо подстановочных совпадений вы также можете использовать строковые операции:

-not $_.FOO.Contains('@LS') -and -not $_.FOO.Contains('@gmail')

или одно регулярное выражение:

$_.FOO -notmatch '@(LS|gmail)'
0 голосов
/ 21 марта 2019

В дополнение к Полезный ответ Ансгара Вихера :

Select-String позволяет получить краткое решение (синтаксис PSv3 +) с целой строкой сопоставление - в соответствии с рекомендациями Ansgar, использование Import-Csv и ограничение сопоставления с интересующей областью предпочтительнее:

(Select-String -NotMatch '@LS', '@gmail' D:\Data\info.csv).Line |
  Set-Content D:\Data\info.csv -Force

Обратите внимание, как вызов Select-String заключен в (...), чтобы обеспечить вводфайл обрабатывается полностью заранее, что позволяет вам записывать обратно в тот же файл в том же конвейере.
Обратите внимание, однако, что он загружает все совпадающие строки в память одновременно и что существует небольшой риск потери данных, еслиобратная запись во входной файл прерывается - обе проблемы можно исправить, если приложить больше усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...