Получение содержимого оболочки Power Shell выполняется слишком медленно при выполнении операции с файлом CSV

Переменная $getErrorCodes имеет много кодов ошибок.

Поскольку я хочу удалить строки, везде, где код ошибки присутствует в файле csv. мой код работает, как и ожидалось, но он слишком медленный, для транзакции 60000 csv требуется около 10 минут.

getErrorCodes = {100 101 103}

csv file( 3 columns)
========
 100|102|104
 110|103|109
 107|108|109

Ожидаемый результат:-

107|108|109

Мой код

Get-Content $CSVFile | Where-Object {($_.ToString().Split(",")[0] -notin $getErrorCodes) -and ($_.ToString().Split(",")[1] -notin $getErrorCodes)-and ($_.ToString().Split(",")[2] -notin $getErrorCodes)} | Out-File "resultfile.csv"

очень признателен, если вы можете предоставить любое другое решение.

Попробуйте Import-CSV затем обработайте полученный объект и экспортируйте его, когда закончите.

Scepticalist 10.12.2020 12:47

Import-CSV тоже медленный, вот мой код Import-Csv $CSVFile -Header A1,A2,A3 | Where-Object {($_.A1 -notin $getErrorCodes)} | Экспорт-CSV "aa.csv"

Ritthisha S 14.12.2020 05:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте Import-Csv / Export-Csv и HashTable или HashSet , которые оптимизированы для бинарного поиска:

$ErrorCodes = [System.Collections.Generic.HashSet[String]](100,101,103)

Import-Csv $CSVFile -Header (1..3) | Where-Object {
    !($ErrorCodes.Contains($_.1)) -and
    !($ErrorCodes.Contains($_.2)) -and
    !($ErrorCodes.Contains($_.3))
} | Export-Csv .\resultfile.csv -UseQuotes Never

Примечание: если вы хотите удалить заголовок из результатов, вы можете сделать что-то вроде:

... | ConvertTo-Csv | Select-Object -skip 1 | Set-Content .\resultfile.csv

Спасибо за ответ, у меня нет заголовка в моем CSV, поэтому я получаю сообщение об ошибке. я бы прочитал файл из строки номер 1, также в моем файле есть повторяющиеся значения в первой строке. Строка 1 > 101 | 101 | 101 Ряд2 > 102 | 102 | 102, поэтому я не мог использовать import-csv.

Ritthisha S 11.12.2020 14:11

В чем ошибка? Также, если вы просто вставите точный минимальный воспроизводимый пример (от -Header (1..3) вверх и до -UseQuotes Never), который я создал выше? Если да, то какую версию PowerShell вы используете? К вашему сведению, параметр -Header (1..3) будет читать CSV без заголовков (и вместо этого использовать заголовки от 1 до 3.

iRon 11.12.2020 14:20

Я поставил заголовок по умолчанию как «Import-Csv $CSVFile -Delimiter ',' -Header «Letter1», «Letter2», «Letter3»», теперь он работает. Большое спасибо. Теперь я получаю другую ошибку «Где-объект: не удается проверить аргумент параметра« Свойство ». Аргумент имеет значение null или пуст. Укажите аргумент, который не является нулевым или пустым, а затем повторите команду». Мой код - Import-Csv $CSVFile -Header "Letter1", "Letter2", "Letter3" | Where-Object $_."Letter1" -NotMatch $getErrorCodes | Внешний файл "test.csv"

Ritthisha S 11.12.2020 14:39

Пожалуйста, примите ответ и создайте новый вопрос для любых новых вопросов.

iRon 11.12.2020 14:44

Спасибо за вашу своевременную поддержку.

Ritthisha S 11.12.2020 14:48

Привет @iRon, исправлена ​​ошибка, у меня не фиксированные столбцы csv, и я бы сравнил только с первым столбцом, но я хочу отобразить всю строку. Import-Csv $CSVFile -Header col1 | Where-Object {!($getErrorCodes.Contains($_.col1)) } | Export-Csv "resultfile.csv" Не могли бы вы мне помочь?

Ritthisha S 14.12.2020 14:17

Другие вопросы по теме