Пишем скриптик (комментарии добавлены при публикации):
find Code -name '*.cc' -o -name '*.h' | \ находим все файлы с исходным кодом xargs cat | \ собираем вместе tee allsource | \ сохраняем чтоб было sed s/#/@/g | \ не даем работать препроцессору cpp | \ теперь он только комментарии удаляет sed '/#/d;/^$/d' | \ удаляем вставленные препроцессором номера строк и пустые строки sed "s/'\"'/@/g" | sed 's/\\[\\"]/@/g; s/"[^"]*"/ /g' \ ликвидируем всё в двойных кавычках > nocomments wordcnt < nocomments | \ частотный словарь алфавитно-цифровых последовательностей sort -r -n -k 2 | \ сортируем grep -v '^ *[0-9]' \ выбрасываем числа > fullcnts
Перловый скриптик wordcnt таков:
while (<>) { @words=split(/[\W\s]+/, $_); foreach $word (@words) { $wordcnt{$word}++; } } foreach $word (keys(%wordcnt)) { printf "%20s %d\n", $word, $wordcnt{$word}; }
В результате на треть миллиона строк живого кода (nocomments) выходит около 38 тысяч разных умных слов. Частотный словарь начинается так:
if 27202 const 21901 return 20803 int 13856 void 13070 char 12530 bool 10847 this 8959 std 8399 else 8278 case 7021 NULL 6896 i 6767 false 6288 it 5855 unsigned 5396 include 5287 true 5158 Expr 5046 mod 4678 string 4480 name 4358 break 4043 for 3868 c_str 3804 class 3742 size 3670 public 3633
(i, it и mod - имена переменных, Expr - имя типа, но не того, которого обычно переменная с именем mod)