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

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

Ответить
Настройки темы
PowerShell - [решено] [Вопрос новичка] Ошибка в скрипте PowerShell

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


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

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


Доброго времени суток, уважаемые форумчане! Прошу прощения, если этой темой нарушил какое-то правило форума, если подобный вопрос уже был или решение покажется вам слишком очевидным, первый раз использую PowerShell и поиск по гуглу/форуму ничего не дал. Буду признателен за любую помощь в исполнении простого скрипта.

Задача: Есть текстовый документ, содержащий в себе данные типа:
Код: Выделить весь код
1
2
1
2
1
4
1
Мне необходимо, чтобы PowerShell выдал мне информацию, что в текстовом документе:
1 - 3
2 - 2
4 - 1

Код: Выделить весь код
Get-Content .\smm.txt | ForEach-Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End { $wordCounts.GetEnumerator() | Sort-Object -Property Value }
и PowerShell возвращает мне следующую информацию:
Код: Выделить весь код
Не удается найти свойство "2" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Не удается найти свойство "2" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Не удается найти свойство "4" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать.
строка:1 знак:78
+ ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End  ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Невозможно вызвать метод для выражения со значением NULL.
строка:1 знак:104
+ ... ++ } -End { $wordCounts.GetEnumerator() | Sort-Object -Property Value ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
Еще по возможности, данные выгрузки необходимо сохранить в csv/любой другой файл с встречающимися словами и кол-вами повторений, чтобы была возможность их как-то сортировать и обрабатывать. Буду благодарен любой помощи в данном вопросе)

Отправлено: 12:32, 26-01-2020

 

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата coollogan:
Да, задача такая, нужно собрать топ ±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
}

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

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

Отправлено: 07:38, 30-01-2020 | #21



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

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


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

fascinating rhythm


Moderator


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

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


Цитата YuS_2:
В powershell core командлет group-object был оптимизирован и работает гораздо быстрее, чем в версиях PS 5.1 и ниже. »
Подтверждаю!
Файл обрабатывался минут 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

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

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

Отправлено: 10:22, 30-01-2020 | #22


Старожил


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

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


coollogan, попробуйте в Excel. Поменять путь до файла и нажать Ctrl+Alt+F5
У меня выгружало около минуты.
Выгрузит адреса с наибольшими повторениями (3000 адресов)

Последний раз редактировалось v79italya, 30-03-2020 в 22:26.

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

Отправлено: 19:54, 30-01-2020 | #23


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


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

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


Друзья, YuS_2, v79italya, DJ Mogarych, Serguei Kouzmine, Busla, ВСЕМ ВАМ ОГРОМНОЕ СПАСИБО!

Не ожидал такой помощи, сейчас буду пробовать все варианты)

Цитата v79italya:
попробуйте в Excel. Поменять путь до файла и нажать Ctrl+Alt+F5 »
А Ctrl+Alt+F5 какую функцию выполняет? Хочу попробовать на mac, не помогает, а гуглеж такой горячей клавиши не находит.

Последний раз редактировалось coollogan, 31-01-2020 в 10:26.


Отправлено: 10:16, 31-01-2020 | #24


Старожил


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

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


Цитата coollogan:
Ctrl+Alt+F5 какую функцию выполняет? »
Запускает запрос Power Query.
Забыл написать что 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, 31-01-2020 в 16:04.

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

Отправлено: 15:54, 31-01-2020 | #25


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


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

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


v79italya, получилось сделать на удаленном рабочем столе! Реально за пару секунд все сделалось, шок! Спасибо!

Отправлено: 16:43, 31-01-2020 | #26


Старожил


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

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


Цитата coollogan:
за пару секунд все сделалось »
Пожалуйста. Только, откровенно говоря, с трудом верится в эту скорость. У меня текстовый файл только читает секунд пятнадцать.
Попробуйте на другом текстовом файле, о котором вы говорили(147мб).

Отправлено: 17:00, 31-01-2020 | #27


Ветеран


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

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


v79italya, может, у него там SSD в чередовании?!

Отправлено: 17:05, 31-01-2020 | #28


Старожил


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

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


Iska, не ну хорошо если все так.
А я грешу на Power Query, типа медленно обрабатывает объемы данных. А надо оказывается на свою несостоятельность грешить, что не могу себе позволить какое нибудь мощное железо для компа. Или на место проживания грешить? Типа, в гиблом месте живу
Вообще то мне мой нэтбук с двумя гигами озу и с двумя ядрами процессора и неизвестно какой видяхой нравится. А че, куплен бу по цене аккамулятора и не планирую менять ближайшие лет пять. Вернее, в ближайшие лет пять не видятся никаких заработков, потому и не планируются покупки. Как то так

Отправлено: 18:14, 31-01-2020 | #29


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


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

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


Цитата v79italya:
Только, откровенно говоря, с трудом верится в эту скорость »
Перепроверил, файл 7мб сортирует за +- 3 секунды
На файл 148 мегабайт ушло секунд 15

v79italya, а если возникнет необходимость получить больше 3 000 строк, я могу внести какие-то корректировки?

Цитата Iska:
может, у него там SSD в чередовании?! »
не знаю SSD или HDD, но оперативки 32 ГБ ��
Дали попользоваться

Отправлено: 01:48, 02-02-2020 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Redhat/Fedora - вопрос новичка - имя ПК chek Общий по Linux 1 23-10-2017 19:53
Разное - С чего начать настройку Windows 7 x64 ? - какие статьи прочитать (вопрос/ы новичка). Макс Фолдер Microsoft Windows 7 23 06-03-2016 05:33
CMD/BAT - ошибка в скрипте cyber_ua Скриптовые языки администрирования Windows 4 01-03-2012 16:46
VBS/WSH/JS - ошибка в скрипте D_e_n_n Скриптовые языки администрирования Windows 3 12-08-2011 14:03
Вопрос новичка, о CSS+DIV верстке Bullet-Avalon Вебмастеру 12 17-02-2009 00:57




 
Переход