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

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

 

Ветеран


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

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


Код: Выделить весь код
Get-Content -Path 'C:\Мои проекты\0297\0002.txt' | `
    Group-Object | Select-Object -Property Name, Count | Sort-Object -Property Name | `
        Export-Csv -NoTypeInformation -Path 'C:\Мои проекты\0297\0003.txt'
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:09, 26-01-2020 | #2



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

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


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

fascinating rhythm


Moderator


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

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


Цитата Iska:
Group-Object »
Какой прекрасный командлет, я и забыл про него.

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


Отправлено: 21:21, 26-01-2020 | #3


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


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

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


ISKA, Большое, человеческое, спасибо!
Еще такой вопрос, сколько примерно по времени должен обрабатываться файл с 1040000 строк? Запустил скрипт, прошел уже час, файл 003 создался сразу, но пустой, в PowerShell тишина, переживаю что ничего не происходит.

Отправлено: 08:49, 27-01-2020 | #4


Ветеран


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

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


coollogan, построчное чтение файла - медленная операция

попробуйте заменить первую строку на
Код: Выделить весь код
(Get-Content -Path 'C:\Мои проекты\0297\0002.txt' -Raw) -split "`n" | `

Отправлено: 11:01, 27-01-2020 | #5


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

fascinating rhythm


Moderator


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

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


Медленное не построчное чтение, а группировка такого здоровенного массива.

Может быть, полезно будет добавить к Group-Object флаг -NoElement, т. к. список элементов в данном случае не нужен.

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


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


Старожил


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

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


coollogan,
а просто использовать немного перереботанный оригиналиный скрипт не хотите ?

Код: Выделить весь код
$wordCounts = @{}; Get-Content .\data.txt | ForEach-Object  { $wordCounts[$_] ++ } ; $wordCounts.GetEnumerator()  | Sort-Object -Property Value
Код: Выделить весь код
Name                           Value
----                           -----
4                              1
2                              2
1                              4
Код: Выделить весь код
for N in $(seq 1 1 10000) ; do  cat data.txt >> bigdata.txt; done
Код: Выделить весь код
$wordCounts = @{}; Get-Content .\bigdata.txt | ForEach-Object  { $wordCounts[$_] ++ } ; $wordCounts.GetEnumerator()  |
Sort-Object -Property Value
так же бысто

[code]
Name Value
---- -----
11 1691
4 1692
2 3384
1 3386
[/CODE ]

Последний раз редактировалось Serguei Kouzmine, 27-01-2020 в 18:34.


Отправлено: 18:25, 27-01-2020 | #7


Старожил


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

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


Цитата coollogan:
файл с 1040000 строк »
Не могли бы этот файл мне отправить на маил: v79italya@gmail.com Попробую для сравнения в Power Query обработать

Отправлено: 21:54, 27-01-2020 | #8


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

fascinating rhythm


Moderator


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

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


Я сгенерировал файл в миллион строк командой
Код: Выделить весь код
(1..1000000).foreach({get-random -InputObject (1..999)}) > c:\temp\million.txt
Вот этой командой всё отработало за 30,59 сек.
Код: Выделить весь код
gc C:\temp\million.txt |group -noel |select name,count |sort @{e={$_.name -as [int]}} |Export-Csv C:\temp\numbers.csv ';' -NoType
А если убрать -NoElement, то за 63,91 сек. Логично - чем меньше данных прокачиваешь через конвейер и чем раньше фильтруешь данные, тем быстрее работает.

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


Последний раз редактировалось DJ Mogarych, 27-01-2020 в 23:27.


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


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


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

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


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мб..

Цитата Serguei Kouzmine:
а просто использовать немного перереботанный оригиналиный скрипт не хотите ? »
Хочу) Но к сожалению вы имеете дело с дилетантом, по этому выслав мне 3 скрипта вы вызвали в моей голове системную ошибку)

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



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




 
Переход