Vojťákovy stránky

Zápočtová úloha do předmětu Unix, počítačové sítě

Zadání

Vypiš tucet nejčastěji se vyskytujících slov v souboru seřazený podle četnosti, včetně těchto četností.

Řešení

Základní idea byla taková, že skript napřed slova seřadí a každé umístí na vlastní řádek, spočítá u každého počet opakování, vynechá opakující se řádky a před každý řádek vypíše počet opakování a nakonec vypíše řádky s nejvyšším číslem.
Zadanou úlohu řeší například níže uvedený kód.

cat zdroj.txt | tr -s '[:punct:][:space:][:cntrl:]' '\n' |
sort | uniq -c | sort -nr | head -n 12

Aby bylo zřejmé, co zadaný kód provádí, je níže zopakován a doplněn o komentáře. Jednotlivé příkazy jsou spojeny rourou, takže výstup z předešlého příkazu je vždy použit jako vstup následujícího.

cat zdroj.txt | # vypíše obsah souboru zdroj.txt
tr -s '[:punct:][:space:][:cntrl:]' '\n' | # nahradí všechny
# skupinky interpunkčních znaků, mezer a kontrolních znaků za
# zalomení řádku (vypíše každé slovo na nový řádek)
sort | # setřídí řádky podle abecedy
uniq -c | # opakující se řádky vynechá a před každý řádek
# napíše počet opakování
sort -nr | # setřídí sestupně podle počátečních čísel značících
# opakování
head -n 12 # vypíše prvních dvanáct řádků

Výstup ze skriptu aplikovaného na testovací soubor vypadá následovně:

46 the
34 grep
17 files
16 of
16 a
15 in
14 to
12 that
12 hello
12 for
10 match
10 lines

Zpět na úvodní stranu

Vytvořil Vojťák • Admin • Aktualizace: 12. dubna 2016 v 15.03