Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Упростить скрипт

Ответить
Настройки темы
PowerShell - Упростить скрипт

Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Technik_spat
Дата: 09-01-2024
Уважаемые форумчане!
Вопрос непраздный , есть скрипт pwsh, но он отрабатывает очень долго (40-60 минут). Возникла идея изъять из неё функцию отбора по признаку 11 и 28 (повесил на bat/cmd, отсеивает из более 500 тыс строк до 30-35 тыс, что правильные значения), что бы попробовать ускорить процесс. Но сколько не пробовал это сделать (я про изъятие функции), так и не смог осилить, тупо не отрабатывает.
Помогите убрать функцию отбора по признакам 11 и 28, оставив только выборку по SGTIN.
Код: Выделить весь код
$sgtin  = 'G:\Test_stgin\Farm_new\amark_sgtin.txt'
$repack = 'G:\Test_stgin\Farm_new\ITOG.txt'
$out    = 'G:\Test_stgin\Farm_new\out.txt'

$csvSgtin  = Import-Csv -Path $sgtin -delim ';' -Header SGTIN, H, Value
$csvRepack = Import-Csv -Path $repack -delim ';' -Header SGTIN, H, Value

$a = ($csvSgtin|? Value -Match '^11$|^28$').SGTIN

$r = foreach ($i in $csvRepack) {
  if ($a -eq $i.SGTIN) {$i.SGTIN+';'+$i.Value} 
}
$r|Out-File $out
Remove-Item -Path "G:\Test_stgin\Farm_new\amark_sgtin.txt"
Remove-Item -Path "G:\Test_stgin\Farm_new\ITOG.txt"

Отправлено: 07:54, 09-01-2024

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 517

Профиль | Отправить PM | Цитировать


Technik_spat,
Образец файла потребуется...
И желательно описание того, что в итоге требуется получить, а лучше образец того, что будет на входе и что необходимо получить на выходе...

-------
scio me nihil scire. Ѫ


Отправлено: 08:21, 09-01-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Сама задача:
из файла ITOG извлечь первый и третий столбцы, используя ключевые строки из файла amark_sgtin.txt
Во вложении обрезанные файлы и как должен выглядить файл вывода (out.txt)
Файл 169499
Файл 169500
Файл 169501

Последний раз редактировалось Technik_spat, 08-05-2025 в 11:58.


Отправлено: 09:03, 09-01-2024 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 517

Профиль | Отправить PM | Цитировать


Цитата Technik_spat:
Сама задача »
В такой постановке задачи, с данными примерами...
Наверное, так:
Код: Выделить весь код
$sgtin  = 'G:\Test_stgin\Farm_new\amark_sgtin.txt'
$repack = 'G:\Test_stgin\Farm_new\ITOG.txt'
$out    = 'G:\Test_stgin\Farm_new\out.txt'
$a  =  ((sls $sgtin -patt '\b(11|28)\b;?$').line|
convertfrom-csv -delim ';' -h SGTIN,H,Value).sgtin
$r = (sls $repack -patt $a).line|convertfrom-csv -delim ';' -h SGTIN,H,Value|
select SGTIN,Value
$param = @{}
$param.Path = $out
$param.NoTypeInformation = $true
$param.Encoding = 'UTF8'
$param.Delimiter = ';'
if ($psversiontable.psversion.major -gt 5){
    $param.NoHeader = $true
    $param.UseQuotes = 'AsNeeded'
}
$r|export-csv @param
- должно побыстрее работать...

-------
scio me nihil scire. Ѫ


Отправлено: 10:26, 09-01-2024 | #4


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


В pwsh 7 не захотел((((
А в 6 уже 20 минут отрабатывает.
Тут наверное проще сделать в таком алгоритме:
в файле ITOG удаление строк отсутствующих в amark_sgtin
т.е. что то аналогичное cmd
Код: Выделить весь код
findstr /L /v /X /g:remove.txt content.txt>result.txt
но наоборот.

Отправлено: 10:52, 09-01-2024 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 517

Профиль | Отправить PM | Цитировать


Цитата Technik_spat:
В pwsh 7 не захотел »
В нем тоже проверялся, версия 7.4
Какую ошибку пишет?

Цитата Technik_spat:
Тут наверное проще сделать в таком алгоритме »
в cmd не проще, особенно, если будет вопрос в кодировке... а ещё особеннее, если файлы непомерного размера...

Цитата Technik_spat:
уже 20 минут отрабатывает. »
Ну, есть вариант ещё ускорить, если потоковое чтение файла задействовать...

-------
scio me nihil scire. Ѫ


Отправлено: 11:58, 09-01-2024 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$sgtin  = 'D:\temp\test_stgin\amark_sgtin.txt'
$repack = 'D:\temp\test_stgin\ITOG.txt'
$out    = 'D:\temp\test_stgin\out.txt'

[regex]$repackStrings = [System.IO.File]::ReadAllLines("$sgtin") -replace ';.*' -join '|'
[regex]$replace = ';\w+|\s+'
[System.IO.File]::WriteAllLines("$out", ([System.IO.File]::ReadAllLines("$repack") -match $repackStrings -replace $replace))

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 09-01-2024 в 12:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:41, 09-01-2024 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 517

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
[regex]$repackStrings = [System.IO.File]::ReadAllLines("$sgtin") -replace ';.*' -join '|' »
тут ведь не все строки будут использоваться:
Цитата Technik_spat:
используя ключевые строки из файла amark_sgtin.txt »
а ключ у них:
Цитата Technik_spat:
Value -Match '^11$|^28$' »
- т.е. в третьем поле должны быть эти цифры...

-------
scio me nihil scire. Ѫ


Отправлено: 13:41, 09-01-2024 | #8


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


СПАСИБО!!!
Теперь можно bat добить другие процедуры и наконец скорость пойдет)))))

Отправлено: 13:49, 09-01-2024 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


YuS_2, я так понял, что автор хотел как раз
Цитата Technik_spat:
убрать функцию отбора по признакам 11 и 28, оставив только выборку по SGTIN »

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:01, 09-01-2024 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Упростить скрипт

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Отправка файлов по почте (помогите упростить) Eirstream Программирование и базы данных 0 11-05-2021 14:24
VBS/WSH/JS - [решено] Упростить Скрипт asacyra Скриптовые языки администрирования Windows 2 30-12-2019 19:05
2012 R2 - Сервер терминалов - упростить темы удаленного рабочего стола __sa__nya Windows Server 2012/2012 R2 1 18-07-2015 11:01
System/Проект - каша в сетях на предприятии - упростить identificator1 Сетевые технологии 1 23-04-2012 08:42
Как можно упростить установку Windows Disconnect Microsoft Windows 95/98/Me (архив) 7 11-11-2004 21:40




 
Переход