line count
Jan. 7th, 2004 05:40 pmконечно, на любом нормальном языке я написал бы это минут за 15. но это как бы неспортивно, Шойхер бы не одобрил. поэтому за час мучений я таки сваял cmd-шник. вот, кому интересно:
@echo off
echo Calculating...
echo 0 > tmpfile
for %%i in (%1) do wc -l %%i >> tmpfile
set /a a = 0
for /f "Tokens=1" %%i in (tmpfile) do set /a a = a + %%i
del tmpfile
echo %a%
в %1, понятное дело, кладётся маска.
wc - из UnxUtils.
(no subject)
(no subject)
(no subject)
Типа
wc -l $1 | awk '/([0-9]*) total/ { print $1; }'
(no subject)
Предполагаю, что результат исходного скрипта был все равно для человека предназначен...
(no subject)
Date: 2004-01-07 08:17 pm (UTC)(no subject)
Date: 2004-01-08 12:27 am (UTC)(no subject)
Date: 2004-01-07 08:22 pm (UTC)(no subject)
Date: 2004-01-07 08:16 pm (UTC)он считает суммарное число строк в файлах, задаваемых маской. там ещё ключик /r должен быть, чтобы рекурсивно.
(no subject)
(no subject)
Date: 2004-01-07 08:12 pm (UTC)(no subject)
Date: 2004-01-07 09:53 pm (UTC)@echo Counting lines...
@echo @find /c /v "гуид для надёжности, лень генерить" %%1 > aaa.bat
@echo.>count.txt
@for %%x in (*.c*,*.h*) do @call aaa.bat %%x >> count.txt
@set /a a = 0
@for /f "tokens=3* delims= " %%i in (count.txt) do @set /a a = a + %%i
@del /q count.txt
@del /q aaa.bat
@echo %a%
Может есть ошибка какая, один раз только попробовал, лень проверять.
(no subject)
Date: 2004-01-08 12:25 am (UTC)Кстати, если уж бороться за идейную чистоту, то есть за неиспользование чужеродных тулзов, то, наверное, можно было посчитать кол-во строк одним только for -- так бы дело и без временных файлов обошлось :) Впрочем, без временных файлов и так можно было, в винюках, оказывается, тоже обратные кавычки уже изобрели. Да, чего только не узнаешь, help почитав..
(no subject)
Date: 2004-01-08 05:54 am (UTC)а подсчёт количества строк одним только for - есть прямо в майкрософтовских примерах по поводу этого for. только это будет сэм-восэм лишних строк вместо одной.
а что за обратные кавычки?
(no subject)
Date: 2004-01-08 06:45 am (UTC)for /f "usebackq tokens=1" %j in (`"for %i in (%1) do wc -l %i"`) do set /a a=a+%j
(your number of percents may vary ;))
Вообще феерические уебки. Вместо того, чтобы встроить нормальные backquotes и arithmetic expansions в сам командный процессор, они устраиваяют коммунизм на уровне отдельно взятой команды. Да еще с совершенно невменяемым синтаксисом. А решение без wc у меня получилось только если не считать пустые строчки. Но тоже в одну строчку:
for /f "usebackq tokens=*" %j in (`"for %i in (*.h) do type %i"`) do @set /a a=a+1
(тормозит правда нещадно, видать, реализация кривая)
А вообще, хватит занимяться фигней. Ты точно проверил, твой wc не пишет total если ему сказать wc -l *, или, к примеру
find . -type f | xargs wc -l? И еще, давно уже пора поставить себе cygwin и убить день на подробное изучение юниксовых тулзов. Поверь, тебе это потом очень много времени сэкономит.(no subject)
Date: 2004-01-08 07:54 am (UTC)но даже если нет - Perl не подходит, его надо инсталлировать. shell - это что такое? у меня шелл - cmd, разве нет? a awk - это да, пошёл изучать. у тебя под рукой нету линка на грамотный туториал по авку?
но: это я только от нечего делать. ибо я хоть и разделяю точку зрения, что лучше день потерять, а потом за час долететь, но задачи, требующие скриптования, возникают у меня крайне редко (когда был предыдущий раз? полгода назад?). вот стану начальником, тогда другое дело :-)
(no subject)
Date: 2004-01-08 08:25 am (UTC)(no subject)
Date: 2004-01-08 08:29 am (UTC)Navajo girls
Date: 2004-01-08 10:56 am (UTC)Re: Navajo girls
Date: 2004-01-08 11:12 am (UTC)