Это не идеально, но я адаптировал "tr'Подход к печати количества каждого слова в некотором стандартном вводе:
tr -c "'[: alnum:]" "\ n" | grep "[[: alnum:]]" | сортировать | uniq -c | сорт -n.
Пока grep -c работает в строке, это помещает каждое слово или число в отдельную строку и сортирует их. Затем uniq -c дедуплицирует их, а также выводит количество вхождений. grep используется для удаления пустых строк только потому, что если вы этого не сделаете, uniq также распечатает количество пустых строк, и я еще не придумал лучшего способа сделать это.
Последняя сортировка является необязательной, используется для перечисления слов по частоте появления, а не в алфавитно-цифровом порядке. Обратите внимание на апостроф в первом наборе, присвоенном tr, так что притяжательные формы и сокращения остаются целыми словами, а скобки, кавычки и другие знаки препинания удаляются. Также обратите внимание, что это разбивается на более длинные, разделенные запятыми числа, превращая каждую группу в (возможно, бессмысленное) одиночное одно-, двух- или трехзначное число. Так что просто не пытайтесь обращаться с ними, как с словами, и это не проблема.
Отвечать