はじめに
この記事はLinux Advent Calendar 2021の9日目の記事になります。
昨日は@kimullaaさんの記事でした。時間が許す人はぜひそちらもチェックしましょう!
やりたいこと
通っている大学の課題でdate
コマンドの結果の一部をcut
コマンドで抽出する機会がありました。やっていることはシンプルでdate
コマンドの結果をパイプでcut
コマンドに渡して範囲選択して良い感じに日時なり時刻なりを取り出しているだけです。課題自体はつつがなく終わったのですがLinuxのコマンドというのはどれもオプションがめちゃんこ多いことが気にかかりました。
***もしかしたら課題で提出した以外のやり方の方が速いこともあるのでは?...と。***ということで課題として私が提出した書き方と同じ出力結果を返す別の書き方を両方計測して結果を比較してみよ〜というのがこの記事でやりたいことです。なお、この後すぐ本題に入ります。コマンドやオプションそのものの解説は記事ではしていないのでもし必要であれば以下の参考資料をお手元で開いておくことをお勧めします。
年月日と曜日編
期待する出力
課題で提出してしまった方(cutにd,fオプションを使う)
ソースコード
計測結果
別の書き方(cutにcオプションを使う)
ソースコード
計測結果
現在時刻編
期待する出力
課題で提出してしまった方(cutにd,fオプションを使う)
ソースコード
計測結果
別の書き方(cutにcオプションを使う)
ソースコード
計測結果
結果・感想
はい。完全にやらかしました。計測結果のrealを見てみると「年月日と曜日」と「現在時刻」の両方とも大学に提出したソースコードよりも提出した後から思いついた書き方の方が1秒強ほど早く処理が終わっています。(つまりc
オプションの方が今回は優秀。)
残念ながら再提出はできません。かなしみ。10000回繰り返して1秒強程度の差でも塵も積もれば山となるでなかなかばかにできせんね。
またこれは個人的な直感ですが、「なんとなく」1文字で範囲を指定するc
オプションの方が文字の塊単位で範囲を指定するd,f
オプションよりも計算コストがかかりそうだと思っていました。しかし結果は逆だったのでやはり気になったことは確かめてみると面白いこともあるものだなぁと思いました。
こうなる理由ははっきりしていませんが、c
オプションに比べてd,f
オプションが比較的遅いのはデリミタで文字列を区切る手間が入っているからなのではないかと私は推測しています。別の見方やご意見、間違いの指摘などコメントくださるととても嬉しいです。