ウェブサイト検索

Linux ターミナルの楽しみ - 単語数と文字数をいじってみよう


Linux コマンドラインにはそれ自体に多くの楽しみがあり、多くの退屈なタスクを非常に簡単にしかも完璧に実行できます。この記事では、単語や文字、テキスト ファイル内でのそれらの頻度などを使って遊びます。

Linux コマンドラインを調整してテキスト ファイルの単語や文字を操作するコマンドとして思い浮かぶのは、wc コマンドだけです。

ワードカウントを表す「wc」コマンドは、テキストファイルから改行、ワード、バイトカウントを出力できます。

小さなスクリプトを使用してテキスト ファイルを分析するには、テキスト ファイルが必要です。統一性を維持するために、以下で説明するように、man コマンドの出力を含むテキスト ファイルを作成します。

man man > man.txt

上記のコマンドは、「man」コマンドの「マニュアル ページ」の内容を含むテキスト ファイル「man.txt」を作成します。

以下のスクリプトを実行して、上記で作成した「テキスト ファイル」内の最も一般的な単語を確認したいと思います。

cat man.txt | tr ' '  '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head
サンプル出力
7557 
262 the 
163 to 
112 is 
112 a 
78 of 
78 manual 
76 and 
64 if 
63 be

上記の 1 行の単純なスクリプトは、テキスト ファイル内で最も頻繁に出現する 10 個の単語とその出現頻度を示します。

次のコマンドを使用して単語を個別に分解してみてはいかがでしょうか。

echo 'tecmint team' | fold -w1
サンプル出力
t 
e 
c 
m 
i 
n 
t 
t 
e 
a 
m

: ここで、「-w1」は幅を表します。

次に、テキスト ファイル内のすべての単語を分解し、結果を並べ替えて、最も頻繁に使用される 10 文字の頻度で目的の出力を取得します。

fold -w1 < man.txt | sort | uniq -c | sort -rn | head
サンプル出力
8579  
2413 e
1987 a
1875 t
1644 i
1553 n
1522 o
1514 s
1224 r
1021 l

テキスト ファイル内で最も頻繁に使用される文字を、大文字と小文字で異なる方法で、その出現頻度とともに取得してみてはどうでしょうか。

fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20
サンプル出力
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 .

上記の出力に句読点が含まれていることを確認してください。 ‘tr’ コマンドを使って句読点を取り除きましょう。さぁ行こう:

fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20
サンプル出力
  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

これで 3 つのテキスト ファイルができました。上記の 1 ライナー スクリプトを実行して出力を確認してみましょう。

cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8
サンプル出力
  11636  
   2504 E 
   2079 A 
   2005 T 
   1729 I 
   1645 N 
   1632 S 
   1580 O

次に、少なくとも 10 文字の長さの頻度の低い文字を生成します。これが簡単なスクリプトです。

cat man.txt | tr '' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n |  grep -E '..................' | head
サンプル出力
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

: すべての結果が生成されるまで、上記のスクリプト内のドットはどんどん増えていきます。 .{10} を使用すると、10 文字の一致を取得できます。

これらの単純なスクリプトは、英語で最も頻繁に出現する単語や文字を知ることにもなります。

それは今のところすべてです。私はまたここで、皆さんもぜひ読んでいただきたい、知っておく価値のある興味深い、風変わりなトピックを紹介します。以下のコメントセクションに貴重なフィードバックをお寄せください。

関連記事: Linux の 20 の面白いコマンド