Дональд Кнут однажды получил задание написать грамотную программу, вычисляющую частоту слов в файле.
Прочитать текстовый файл, определить n наиболее часто используемых слов и распечатать отсортированные слова.список этих слов вместе с их частотами.
Даг Макилрой классно переписал 10 страниц Паскаля несколькими строчками sh:
tr -cs A-Za-z '\n' |
tr A-Z a-z |
sort |
uniq -c |
sort -rn |
sed ${1}q
В качестве небольшого упражнения я преобразовалэто для Powershell:
(-split ((Get-Content -Raw test.txt).ToLower() -replace '[^a-zA-Z]',' ')) |
Group-Object |
Sort-Object -Property count -Descending |
Select-Object -First $Args[0] |
Format-Table count, name
Мне нравится, что Powershell объединяет sort | uniq -c
в один Group-Object
.
Первая строка выглядит некрасиво, поэтому мне интересно, можно ли ее написать более элегантно?Может быть, есть способ загрузить файл с разделителем регулярных выражений?
Один очевидный способ сократить код - использовать псевдонимы, но это не способствует удобочитаемости.