LoginSignup
3
0

More than 1 year has passed since last update.

【Linux】cutコマンドのオプション別パフォーマンス対決

Posted at

はじめに

この記事はLinux Advent Calendar 2021の9日目の記事になります。
昨日は@kimullaaさんの記事でした。時間が許す人はぜひそちらもチェックしましょう!

やりたいこと

通っている大学の課題でdateコマンドの結果の一部をcutコマンドで抽出する機会がありました。やっていることはシンプルでdateコマンドの結果をパイプでcutコマンドに渡して範囲選択して良い感じに日時なり時刻なりを取り出しているだけです。課題自体はつつがなく終わったのですがLinuxのコマンドというのはどれもオプションがめちゃんこ多いことが気にかかりました。

もしかしたら課題で提出した以外のやり方の方が速いこともあるのでは?...と。ということで課題として私が提出した書き方と同じ出力結果を返す別の書き方を両方計測して結果を比較してみよ〜というのがこの記事でやりたいことです。なお、この後すぐ本題に入ります。コマンドやオプションそのものの解説は記事ではしていないのでもし必要であれば以下の参考資料をお手元で開いておくことをお勧めします。

cutコマンドの参考資料
dateコマンドの参考資料

年月日と曜日編

期待する出力

スクリーンショット 2021-12-04 19.17.07.png

課題で提出してしまった方(cutにd,fオプションを使う)

ソースコード

スクリーンショット 2021-12-04 19.07.11.png

計測結果

スクリーンショット 2021-12-04 19.07.36.png

別の書き方(cutにcオプションを使う)

ソースコード

スクリーンショット 2021-12-04 19.16.19.png

計測結果

スクリーンショット 2021-12-04 19.19.21.png

現在時刻編

期待する出力

当然この値は現在時刻によって変わります
スクリーンショット 2021-12-04 19.28.44.png

課題で提出してしまった方(cutにd,fオプションを使う)

ソースコード

スクリーンショット 2021-12-04 19.11.15.png

計測結果

スクリーンショット 2021-12-04 19.12.43.png

別の書き方(cutにcオプションを使う)

ソースコード

スクリーンショット 2021-12-04 19.21.53.png

計測結果

スクリーンショット 2021-12-04 19.23.09.png

結果・感想

はい。完全にやらかしました。計測結果のrealを見てみると「年月日と曜日」と「現在時刻」の両方とも大学に提出したソースコードよりも提出した後から思いついた書き方の方が1秒強ほど早く処理が終わっています。(つまりcオプションの方が今回は優秀。)

残念ながら再提出はできません。かなしみ。10000回繰り返して1秒強程度の差でも塵も積もれば山となるでなかなかばかにできせんね。

またこれは個人的な直感ですが、「なんとなく」1文字で範囲を指定するcオプションの方が文字の塊単位で範囲を指定するd,fオプションよりも計算コストがかかりそうだと思っていました。しかし結果は逆だったのでやはり気になったことは確かめてみると面白いこともあるものだなぁと思いました。

こうなる理由ははっきりしていませんが、cオプションに比べてd,fオプションが比較的遅いのはデリミタで文字列を区切る手間が入っているからなのではないかと私は推測しています。別の見方やご意見、間違いの指摘などコメントくださるととても嬉しいです。

3
0
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
3
0