![]() |
[Вопрос новичка] Ошибка в скрипте PowerShell
Доброго времени суток, уважаемые форумчане! Прошу прощения, если этой темой нарушил какое-то правило форума, если подобный вопрос уже был или решение покажется вам слишком очевидным, первый раз использую PowerShell и поиск по гуглу/форуму ничего не дал. Буду признателен за любую помощь в исполнении простого скрипта.
Задача: Есть текстовый документ, содержащий в себе данные типа: Код:
1 1 - 3 2 - 2 4 - 1 Код:
Get-Content .\smm.txt | ForEach-Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End { $wordCounts.GetEnumerator() | Sort-Object -Property Value } Код:
Не удается найти свойство "2" для данного объекта. Убедитесь, что оно существует и его можно задать. |
Код:
Get-Content -Path 'C:\Мои проекты\0297\0002.txt' | ` |
Цитата:
|
ISKA, Большое, человеческое, спасибо!
Еще такой вопрос, сколько примерно по времени должен обрабатываться файл с 1040000 строк? Запустил скрипт, прошел уже час, файл 003 создался сразу, но пустой, в PowerShell тишина, переживаю что ничего не происходит. |
coollogan, построчное чтение файла - медленная операция
попробуйте заменить первую строку на Код:
(Get-Content -Path 'C:\Мои проекты\0297\0002.txt' -Raw) -split "`n" | ` |
Медленное не построчное чтение, а группировка такого здоровенного массива.
Может быть, полезно будет добавить к Group-Object флаг -NoElement, т. к. список элементов в данном случае не нужен. |
coollogan,
а просто использовать немного перереботанный оригиналиный скрипт не хотите ? Код:
$wordCounts = @{}; Get-Content .\data.txt | ForEach-Object { $wordCounts[$_] ++ } ; $wordCounts.GetEnumerator() | Sort-Object -Property Value Код:
Name Value Код:
for N in $(seq 1 1 10000) ; do cat data.txt >> bigdata.txt; done Код:
$wordCounts = @{}; Get-Content .\bigdata.txt | ForEach-Object { $wordCounts[$_] ++ } ; $wordCounts.GetEnumerator() | [code] Name Value ---- ----- 11 1691 4 1692 2 3384 1 3386 [/CODE ] |
Цитата:
|
Я сгенерировал файл в миллион строк командой
Код:
(1..1000000).foreach({get-random -InputObject (1..999)}) > c:\temp\million.txt Код:
gc C:\temp\million.txt |group -noel |select name,count |sort @{e={$_.name -as [int]}} |Export-Csv C:\temp\numbers.csv ';' -NoType |
v79italya, загрузил файл для теста на диск: yadi.sk/d/a4DIRzf2qCISYg (надеюсь на форуме разрешено делиться ссылками на текстовые документы)
DJ Mogarych, использовал код: Код:
gc C:\temp\million.txt |group -noel |select name,count |sort @{e={$_.name -as [int]}} |Export-Csv C:\temp\numbers.csv ';' -NoType Это связано с тем, что у меня не просто нули и единицы, а ссылки, я правильно понимаю? Следующий файл который я хотел обработать весит 147мб.. Цитата:
|
Цитата:
|
Цитата:
|
coollogan, объём данных, который вы обрабатываете, весьма большой.
Необходимо дождаться окончания работы скрипта - да, он может работать несколько часов. Если вы хотите быстрее, надо запускать на более мощном железе. Либо, сначала модифицировать сам исходный файл, например, убрать https://www.instagram.com/, а оставлять только логины - это уменьшит время обработки, т. к. объём файла будет меньше. |
Цитата:
Следующий на обработку файл – 147мб, боюсь представить сколько времени займет процесс. |
Ну, можно, наверное, намутить какой-то вывод в консоль процесса, но это ещё больше растянет время обработки.
coollogan, я упустил одну важную вещь! Уберите из скрипта Код:
@{e={$_.name -as [int]}} Так что Код:
gc C:\temp\PS.txt |group -noel |select name,count |sort name |Export-Csv C:\temp\PS.csv ';' -NoType Код:
gc C:\temp\PS.txt |group -noel |Export-Csv C:\temp\PS.csv ';' -NoType |
DJ Mogarych, большое спасибо за помощь)
|
Цитата:
coollogan, Вам действительно нужен подсчёт количества повторов? Может быть, задача проще, и Вам достаточно просто отобрать уникальные значения, без подсчёта повторов, не?! |
coollogan, можете попробовать на WSH (используем OLE DB):
Скрытый текст
Код:
Option Explicit Поместите скрипт рядом с Вашим файлом PS.txt. У меня получается на Вашем выложенном файле PS.txt так: Скрытый текст
![]() с сортировкой — чуть больше двадцати секунд (без сортировки — чуть больше пятнадцати секунд). NB! Важное замечание: на x64 ОС нужно использовать x86-версии cscript.exe/wscript.exe, т.е., прямо указывать путь к ним из каталога C:\Windows\SysWOW64 (см. скриншот под спойлером выше). |
Цитата:
Цитата:
Цитата:
Это встроенная функция как PowerShell, или можно её скачать? Мне советовали использовать AWK, чуть с ума не сошел изучая сайты которые хоть что-то пишут про него) Да пишут так, как будто первые 499 страниц инструкции куда-то делись, и начинается с пятисотой)) Понял, что не мой вариант, хотя там такой массив данных обрабатывался за несколько секунд тоже) |
Цитата:
2. Расположите данный скрипт рядом с Вашим файлом PS.txt. 3. Вызовите скрипт на исполнение. Если Ваша ОС — x64, то вместо пункта 3 будут следующие пункты: 3. Откройте интерпретатор команд: Win-R, «"%comspec%" /k», Enter. 4. Перетащите из окна Проводника в окно интерпретатора команд файл «C:\Windows\SysWOW64\cscript.exe». 5. Нажмите пробел, находясь в окне интерпретатора команд. 6. Перетащите из окна Проводника в окно интерпретатора команд скрипт WSH (файл с расширением .vbs), созданный в пп.1-2. 7. Нажмите Enter, находясь в окне интерпретатора команд. |
Цитата:
Тогда: 1. Установите powershell core, лучше крайнюю версию (7.0). В powershell core командлет group-object был оптимизирован и работает гораздо быстрее, чем в версиях PS 5.1 и ниже. В общем, для получения адекватного времени обработки, необходимо использовать свежую версию powershell. 2. Если откидывать уникальные строки, то можно код оптимизировать (у меня отрабатывает на Вашем файле ps.txt, примерно 50-55 сек.): Код:
measure-command{ |
Цитата:
Файл обрабатывался минут 15 на моей машине в Powershell 7 RC2. Окончания работы PS 5.1 я ждал почти сутки, но так и не дождался. В целом, код такой: Код:
(gc C:\temp\PS.txt |group -noel |select name,count).where{$_.count -ge 3000} |sort count -desc |Export-Csv C:\temp\PS.txt ';' -NoType |
coollogan, попробуйте в Excel. Поменять путь до файла и нажать Ctrl+Alt+F5
У меня выгружало около минуты. Выгрузит адреса с наибольшими повторениями (3000 адресов) |
Друзья, YuS_2, v79italya, DJ Mogarych, Serguei Kouzmine, Busla, ВСЕМ ВАМ ОГРОМНОЕ СПАСИБО!
Не ожидал такой помощи, сейчас буду пробовать все варианты) Цитата:
|
Цитата:
Забыл написать что Power Query встроена в Excel2016 и в Excel 365. Для Excel 2010-2013 надстройку Power Query надо скачивать отдельно. И все это на Windows. Насчет Excel на Mac мне ничего не известно здесь внизу есть и про Mac HTML код:
https://support.office.com/ru-ru/article/%D0%93%D0%B4%D0%B5-%D0%BD%D0%B0%D0%B9%D1%82%D0%B8-%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-power-query-e9332067-8e49-46fc-97ff-f2e1bfa0cb16 |
v79italya, получилось сделать на удаленном рабочем столе! Реально за пару секунд все сделалось, шок! Спасибо!
|
Цитата:
Попробуйте на другом текстовом файле, о котором вы говорили(147мб). |
v79italya, может, у него там SSD в чередовании?!
|
Iska, не ну хорошо если все так.
А я грешу на Power Query, типа медленно обрабатывает объемы данных. А надо оказывается на свою несостоятельность грешить, что не могу себе позволить какое нибудь мощное железо для компа. Или на место проживания грешить? Типа, в гиблом месте живу :) Вообще то мне мой нэтбук с двумя гигами озу и с двумя ядрами процессора и неизвестно какой видяхой нравится. А че, куплен бу по цене аккамулятора и не планирую менять ближайшие лет пять. Вернее, в ближайшие лет пять не видятся никаких заработков, потому и не планируются покупки. Как то так :) |
Цитата:
На файл 148 мегабайт ушло секунд 15 :) v79italya, а если возникнет необходимость получить больше 3 000 строк, я могу внести какие-то корректировки? Цитата:
Дали попользоваться |
Вложений: 1
coollogan, в ячейке рядом с адресом файла введите необходимое количество строк и обновите запрос
|
Цитата:
Пишет ошибка инициализации к внешнему источнику данных. |
coollogan, файл ко мне никак не привязан. Раз работал запрос на этой машине, то и сейчас должен работать. Другой вопрос, если в одном Excel2016 работает, а в другом Excel2016 не работает. Можно попробовать установить обновление для Excel и Power Queryhttps://www.catalog.update.microsoft...px?q=KB4462115
|
Цитата:
|
Время: 17:09. |
Время: 17:09.
© OSzone.net 2001-