CMD/BAT - Процентное соотношение имен в файле

Ответить
Аватара пользователя
f1rstonlyone@vk

CMD/BAT - Процентное соотношение имен в файле

Сообщение f1rstonlyone@vk »

Здравствуйте.

Собственно, есть файл, в котором много разных имен/названий того или иного файла. Нужно сделать процентное соотношение этих имен в файле.



Пример:



==Folders==

File1.exe

File1.exe

File2.exe

File2.exe

File1.exe

File3.exe

File1.exe

File2.exe

File4.exe

File1.exe



--> 50% - File1 --> 30% File2 --> 10% File3 --> 10% File4
Аватара пользователя
Iska

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение Iska »

Цитата f1rstonlyone@vk:



Собственно, есть файл, в котором много разных имен/названий того или иного файла.
CMD/BAT - Процентное соотношение имен в файле




Упакуйте образец этого файла в архив и приложите к сообщению.
Аватара пользователя
alpap

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение alpap »

f1rstonlyone@vk,

именно вот так скопировал в "file.txt":



Код:

Код: Выделить всё

==Folders==
File1.exe
File1.exe
File2.exe
File2.exe
File1.exe
File3.exe
File1.exe
File2.exe
File4.exe
File1.exe

если имена файлов не будут иметь пробелов, то будет работать такой код:



Код:

Код: Выделить всё

@echo off
Вложения
base.rar
(936 байт) 0 скачиваний
base.rar
(936 байт) 0 скачиваний
Аватара пользователя
f1rstonlyone@vk

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение f1rstonlyone@vk »

Цитата alpap:

f1rstonlyone@vk,

именно вот так скопировал в "file.txt":

Код:

==Folders==

File1.exe

File1.exe

File2.exe

File2.exe

File1.exe

File3.exe

File1.exe

File2.exe

File4.exe

File1.exe

если имена файлов не будут иметь пробелов, то будет работать такой код:

Код:

@echo off
Аватара пользователя
Iska

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение Iska »

Посредством LogParser (
Средство Log Parser 2.2 - TechNet - Microsoft
):

Код:

Код: Выделить всё

"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, MUL(PROPCOUNT(Field1), 100.0) AS Percent FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1 ORDER BY Percent DESC" -i:CSV -headerRow:OFF -q:ON


Скрытый текст

[spoiler]Изображение[/spoiler]

Или так:

Код:

Код: Выделить всё

"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total, MUL(PROPCOUNT(Field1), 100.0) AS Percent INTO DATAGRID FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1 ORDER BY Percent DESC" -i:CSV -headerRow:OFF -q:ON


Скрытый текст

[spoiler]Изображение[/spoiler]

Или даже так:

Код:

Код: Выделить всё

"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total INTO Chart.gif FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1" -i:CSV -headerRow:OFF -q:ON -o:CHART -chartType:ColumnClustered -groupSize:2048x768 -view:ON


Скрытый текст

[spoiler]Изображение[/spoiler]

Код:

Код: Выделить всё

"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total INTO Chart.gif FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1" -i:CSV -headerRow:OFF -q:ON -o:CHART -chartType:Pie -groupSize:1024x1024 -view:ON


Скрытый текст

[spoiler]Изображение[/spoiler]
Вложения
Вложение Screenshot_1.png больше недоступно
Вложения

[Расширение png было запрещено, вложение больше недоступно.]

Аватара пользователя
megaloman

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение megaloman »

Вот вариант решения

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo OFF
cls
Set "FileIn=Z:\Box_In\file.txt"
SetLocal EnableExtensions EnableDelayedExpansion
Set /A nAll=0
Set /A nName=0
Set "Str="
For /F "usebackq tokens=*" %%s In (`More +1 "%FileIn%" 2^>nul^|Sort`) Do (
	If /I Not "!Str!"=="%%s" (
		Set /A nName+=1
		Set "Str=%%s"
		Set /A n!nName!=0
		Set "Name!nName!=%%s"
	)
	Set /A nAll+=1
	Set /A n!nName!+=1
)
Set "OutStr="
FOR /L %%i IN (1,1,%nName%) DO Call :Out "Name%%i" "n%%i"
Echo %OutStr%
pause
GoTo :Eof
:Out
	Call Set "Name=%%%~1%%"
	Call Set "n=%%%~2%%"
	Set /A Percent=((n*10000)/nAll+50)/100
	Set "OutStr=%OutStr% --^>%Percent%%% - %Name%"
GoTo :Eof


Не нашел ничего общего между файлом base.txt в представленном base.rar и анонсированном тексте в самом вопросе

Обрабатывал файл, где первой строкой идет строка

==Folders==

Я её пропускаю.

И далее

File1.exe

File1.exe

File2.exe

File2.exe

File1.exe

File3.exe

File1.exe

File2.exe

File4.exe

File1.exe

Есть пробелы, нет - не важно.
Аватара пользователя
alpap

Re: CMD/BAT - Процентное соотношение имен в файле

Сообщение alpap »

Цитата f1rstonlyone@vk:



, выдало
CMD/BAT - Процентное соотношение имен в файле




первую строку конечно лучше убрать, а вот пробелы недопустимы, но выводит у меня нормально:

Файл 146164


писалось в принципе на скорую руку, но как вариант, когда лучшего нет, а так варианты лучше использовать предоставленные Iska и megaloman
Ответить

Вернуться в «Скриптовые языки администрирования Windows»