新卒エンジニアによる全部俺カレンダー2022 7日目投稿記事です。
概要
「1日にどのくらいターミナルでコマンド入力作業をしているんだろう・・」とふと可視化してみたくなったので、シェルスクリプトを書いてみました。
前提
- ターミナルはiTerm2を使用
- 任意のディレクトリに日付をprefixとしたターミナルの入力ログが保存されている。
- 例: 20221020_140806.XXXX-XXXX-XXXX.log
コード
シェルファイルを作成
touch count_log.sh
count_log.sh
USER_NAME=hoge@fuga # ターミナル画面の左端に表示されるユーザー名をここで指定してあげます。
DATE=$@ # 日付のprefixを引数にする
COUNT=`cat $DATE*.log | grep $USER_NAME | sed 's/.*\%//' | wc -m # ユーザー名でgrepして入力コマンド部分をフィルターする
echo $DATE $COUNT # 日付と文字数を出力
たった4行コードを書くだけです。
COUNT=`cat $DATE*.log | grep $USER_NAME | sed 's/.*\%//' | wc -m
ターミナルのログから入力したコマンドの総文字数を計算するのには4つのコマンドをパイプさせます。
cat
ログファイルの内容を出力する
grep
$USER_NAMEが含まれる行のみを出力する
sed
指定した正規表現に従って、出力結果をフィルターする
wc -m
文字数をカウントする
sedについてちょっと詳しく
sed 's/.*\%//'
上記のコマンドで指定した正規表現では、ログの出力結果から[ユーザー名] [ディレクトリ]%
の部分をフィルターします。
hoge@fuga ~ % cd ~/hoge/fuga
↓
cd ~/hoge/fuga
注意点
[ユーザー名] [ディレクトリ]%
の記号部分は環境によって異なるので、適宜正規表現を変えてください
- zsh (%)
sed 's/.*\%//'
- bash ($)
sed 's/.*\$//'
- rootユーザー (#)
sed 's/.*\#//'
実行してみる
2022年12月1日のログからコマンド入力文字数を出力してみます。
sh count_log.sh 20221201
20221201 1523
結果が出ました〜
参考資料