1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

macOSのコマンドで最長文字数のコマンドは?平均文字数は?という疑問をcompgen + AWKで検証してみた

Posted at

事の起こり

先日、筆者の友人の@jouleさんが以下の大変面白い記事を投稿していました。

コマンド(compgen、AWK)を駆使して、Ubuntuにおける最大文字数のコマンドやコマンドの平均文字数、そして1文字コマンド(最小文字数)、各文字数のコマンドがどれぐらい存在するかなど、なかなかユニークな内容です。筆者はふと思いました。macOSのコマンドを調べたら、どの様な結果が得られるだろうか?と。そこで、友人に聞いてみたところ、この調査で必要なcompgenコマンドはbashで利用出来るコマンドであり、友人が愛用しているzshの環境では利用出来ないとのことでした。(厳密には以下の参考記事に記載されているおまじないを利用すればzshでも実行可能です。)筆者はMacでbashを利用しているのですぐに検証が出来ます。よって、compgen + AWKを駆使して、macOSのコマンドで最長文字数のコマンド、コマンドの平均文字数、等々を調査してみようと思います。

  • 参考

環境情報

以下の環境を用いて調査しました。

  • macOS 14.5 Sonoma
  • bash 5.2.26

compgenコマンド

compgenコマンドの本来の用途は、bashの補完候補生成です。ターミナル上でコマンドを入力する時に、途中まで入力した後に、TABキーを打鍵すると補完されますが、その候補を生成するのが、compgenコマンドです。ここで、compgenコマンドの今回用いるオプションは以下です。

オプション 詳細
-c 実行できるコマンド
-b 実行できるビルトイン
-k 実行できるキーワード

最長文字数のコマンドを調査

まずは最長文字数のコマンドを調査します。以下のコマンドを実行してみます。

compgen -bck | awk 'max<length($0){max=length($0);c=$0} END{print max, c}'

以下の結果が得られました。これは通常のユーザー実行コマンドでは無い様です。

$ compgen -bck | awk 'max<length($0){max=length($0);c=$0} END{print max, c}'
50 __git_compute_second_level_config_vars_for_section

各オプションを1つずつ使った場合の結果

$ compgen -b | awk 'max<length($0){max=length($0);c=$0} END{print max, c}'
9 readarray
$ compgen -c | awk 'max<length($0){max=length($0);c=$0} END{print max, c}'
50 __git_compute_second_level_config_vars_for_section
$ compgen -k | awk 'max<length($0){max=length($0);c=$0} END{print max, c}'
8 function

readarrayはファイルから行を読み込み、配列に格納するビルトインコマンド、functionはbashのfunctionの様です。

平均文字数の調査

以下のコマンドを実行します。

compgen -bck | awk '{c=c+1;lc=lc+length($0)} END{ print lc/c }'

最大文字数のコマンドが50文字であるにしては平均文字数が小さい様な。。。

$ compgen -bck | awk '{c=c+1;lc=lc+length($0)} END{ print lc/c }'
10.3159

文字数の分布を調査

コマンドの文字数毎の分布を出してみます。

compgen -bck | awk 'BEGIN{split(0,ar)} {p=length($0);ar[p]+=1} END{for(i=1;i<=50;i++){printf("%02d, %d\n", i, ar[i])}}'
$ compgen -bck | awk 'BEGIN{split(0,ar)} {p=length($0);ar[p]+=1} END{for(i=1;i<=50;i++){printf("%02d, %d\n", i, ar[i])}}'
01, 18
02, 84
03, 142
04, 244
05, 250
06, 283
07, 310
08, 297
09, 196
10, 176
11, 155
12, 121
13, 95
14, 84
15, 90
16, 53
17, 50
18, 55
19, 42
20, 53
21, 61
22, 45
23, 24
24, 26
25, 26
26, 19
27, 14
28, 12
29, 21
30, 6
31, 5
32, 8
33, 7
34, 9
35, 5
36, 7
37, 2
38, 3
39, 1
40, 2
41, 1
42, 0
43, 0
44, 0
45, 1
46, 0
47, 0
48, 0
49, 1
50, 1

コマンドの文字長に随分と偏りが有ることが分かります。最も数が多いのは7文字のコマンドの様です。実はこれはUbuntuも同様です。。。

image.png

1文字コマンド

最後に1文字コマンドを検索してみます。

compgen -bck | awk 'length($0)==1{printf("%s ", $0)} END{printf("\n")}'

以下の結果となりました。

$ compgen -bck | awk 'length($0)==1{printf("%s ", $0)} END{printf("\n")}'
. : [ { } ! ! . : R X [ [ l w { }

まとめ

macOS Sonomaにおけるコマンド文字数に関する素朴な疑問を検証してみました。面白いアイディアを提供してくれた友人の@jouleさんには感謝です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?