Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

Новый участник


Сообщения: 38
Благодарности: 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


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

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


Хмм,
Возможно...
Тогда в моем скрипте можно ускорить:
Код: Выделить весь код
$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  =  (-split (gc $sgtin -raw)) -replace ';[^\n]+'
$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. Ѫ


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



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Technik_spat, а этот вопрос решили?
Ну, всё равно, может быть, кому-нибудь пригодится...
powershell с потоковым чтением-записью файлов:
Код: Выделить весь код
$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'
$reader = [io.streamreader]::new($sgtin)
$ht = @{}
while ($reader.peek() -ne -1) {
    $str = $reader.readline()
    if ($str -match '\b(11|28)\b;?$'){
        $ht.add($str.substring(0,$str.indexof(';')),'f')
    }
}
$reader.close()

$reader = [io.streamreader]::new($repack)
$writer = [io.streamwriter]::new($out)
while ($reader.peek() -ne -1) {
    $str = $reader.readline()
    if ($ht[$str.substring(0,$str.indexof(';'))]){
        $s = $str -split ';'
        $writer.writeline($s[0] + ';' + $s[2])
    }
}
$reader.close()
$writer.close()
- должен быть самый шустрый вариант (нужны реальные, большие файлы, мне проверить нечем)... хоть и с отбором по шаблону '11|28'

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

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

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



Компьютерный форум 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




 
Переход