Zabawa w terminalu Linux — baw się liczeniem słów i znaków
Linia poleceń Linuksa ma mnóstwo zabawy i wiele żmudnych zadań można wykonać bardzo łatwo, a jednocześnie perfekcyjnie. W tym artykule omówimy zabawę słowami i znakami, ich częstotliwością w pliku tekstowym itp.
Jedynym poleceniem, które przychodzi nam na myśl, aby ulepszyć wiersz poleceń Linuksa w celu manipulowania słowami i znakami z pliku tekstowego, jest polecenie wc.
Polecenie „wc”, które oznacza liczbę słów, umożliwia wydrukowanie liczby znaków nowej linii, słów i bajtów z pliku tekstowego.
Aby pracować z małymi skryptami i analizować plik tekstowy, musimy mieć plik tekstowy. Aby zachować jednolitość, tworzymy plik tekstowy z wynikami polecenia man, jak opisano poniżej.
man man > man.txt
Powyższe polecenie tworzy plik tekstowy „man.txt” z zawartością „strony podręcznika” dla polecenia „man”.
Chcemy sprawdzić najpopularniejsze słowa w utworzonym powyżej „pliku tekstowym”, uruchamiając poniższy skrypt.
cat man.txt | tr ' ' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head
Przykładowe wyjście
7557
262 the
163 to
112 is
112 a
78 of
78 manual
76 and
64 if
63 be
Powyższy prosty skrypt liniowy pokazuje dziesięć najczęściej występujących słów i częstotliwość ich występowania w pliku tekstowym.
Co powiesz na podzielenie słowa na pojedyncze osoby za pomocą następującego polecenia.
echo 'tecmint team' | fold -w1
Przykładowe wyjście
t
e
c
m
i
n
t
t
e
a
m
Uwaga: tutaj „-w1” oznacza szerokość.
Teraz podzielimy każde słowo w pliku tekstowym, posortujemy wynik i uzyskamy żądany wynik z częstotliwością dziesięciu najczęściej występujących znaków.
fold -w1 < man.txt | sort | uniq -c | sort -rn | head
Przykładowe wyjście
8579
2413 e
1987 a
1875 t
1644 i
1553 n
1522 o
1514 s
1224 r
1021 l
A co powiesz na to, aby najczęstsze znaki w pliku tekstowym różniły się wielkimi i małymi literami oraz częstotliwością ich występowania?
fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20
Przykładowe wyjście
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 o
1269 R
1055 L
836 H
791 P
766 D
753 C
725 M
690 U
605 F
504 G
352 Y
344 .
Sprawdź powyższe dane wyjściowe, w których uwzględniono znak interpunkcyjny. Usuńmy znaki interpunkcyjne za pomocą polecenia „tr”. No to ruszamy:
fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20
Przykładowe wyjście
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 O
1550
1269 R
1055 L
836 H
791 P
766 D
753 C
725 M
690 U
605 F
504 G
352 Y
Teraz mam trzy pliki tekstowe, uruchommy powyższy skrypt liniowy, aby zobaczyć wynik.
cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8
Przykładowe wyjście
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 O
Następnie będziemy generować te rzadkie litery, które mają co najmniej dziesięć liter. Oto prosty skrypt.
cat man.txt | tr '' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n | grep -E '..................' | head
Przykładowe wyjście
1 ──────────────────────────────────────────
1 a all
1 abc any or all arguments within are optional
1 able see setlocale for precise details
1 ab options delimited by cannot be used together
1 achieved by using the less environment variable
1 a child process returned a nonzero exit status
1 act as if this option was supplied using the name as a filename
1 activate local mode format and display local manual files
1 acute accent
Uwaga: Im więcej kropek w powyższym skrypcie, aż do wygenerowania wszystkich wyników. Możemy użyć .{10}, aby uzyskać dziesięć dopasowań znaków.
Te proste skrypty pozwalają nam także poznać najczęściej występujące słowa i znaki w języku angielskim.
To wszystko na teraz. Będę tu ponownie z kolejnym ciekawym i nietypowym tematem, o którym warto wiedzieć, a który z pewnością z chęcią przeczytacie. Nie zapomnij podzielić się z nami swoją cenną opinią w sekcji komentarzy poniżej.
Przeczytaj także: 20 zabawnych poleceń systemu Linux