Да, задача такая, нужно собрать топ ±3000 повторяющихся строк из списка)
т.е. остальные записи не нужны совсем?
Тогда:
1. Установите powershell core, лучше крайнюю версию (7.0). В powershell core командлет group-object был оптимизирован и работает гораздо быстрее, чем в версиях PS 5.1 и ниже. В общем, для получения адекватного времени обработки, необходимо использовать свежую версию powershell.
2. Если откидывать уникальные строки, то можно код оптимизировать (у меня отрабатывает на Вашем файле ps.txt, примерно 50-55 сек.):
Код:
Код: Выделить всё
measure-command{
$in = 'ps.txt'
$out = 'ps.csv'
$arr = gc $in -r 0 -enc utf8|%{$_|sort}
$arrnum = for ($i=1;$i -lt $arr.count;$i++){
if($arr[$i] -eq $arr[($i-1)]){$i;$i-1}
}
$arrsnum = $arrnum|sort -uni
$arrresult = for($i=0;$i -lt $arrsnum.count;$i++){
$arr[($arrsnum[$i])]
}
$arrresult|group -noel |select name,count|sort count -d|
export-csv $out -notype -enc utf8
}