TL;DR
aliasでこういうシェルを登録しておくとレコーディングダイエットになって良いですよ、というスクリプトを書いた。
テクい事はあまりやってない。
経緯
エンジニア諸氏については昨今流行している感染症対策としてリモートワークでの勤務に切り替わっている事が多いと思います。
私も漏れずその一人だったのですが、リモートワークが始まってから暫く経った頃、ふと体重計を見ると年末から4kgも増えており、感染症とは別の危機感を覚えました。
一般に、リモートワークという働き方に切り替わると食事と運動に関して変化が訪れます(運動量の低下に伴って体重が増加するようになります)。
私は仕事をしながらデスクで食事をするという最悪なルーチンワークになっていたので、それならばとPCで気軽に食事内容を記録できる方法を考えてみました。
実装内容
WIE_LOG_PATH=~/scripts/log/whatieat.txt
if [ ! -e $WIE_LOG_PATH ]; then
touch $WIE_LOG_PATH
fi
if test $# -eq 0; then
echo "argument not specified."
exit 1
fi
if test $1 = "-log" -o $1 = "log" -o $1 = "-l"; then
tail -${2:-"10"} $WIE_LOG_PATH
zgrep "^"`date "+%Y-%m-%d"` $WIE_LOG_PATH | awk -F, '{ sum += $3 } END{ print "today calories: "sum }'
exit 0
fi
if test $# -ne 2; then
echo "argument number must be 2."
exit 1
fi
CALCULATED_ROW=`date "+%Y-%m-%d %H:%M:%S"`","$1","$2
echo $CALCULATED_ROW >> $WIE_LOG_PATH
echo $CALCULATED_ROW
zgrep "^"`date "+%Y-%m-%d"` $WIE_LOG_PATH | awk -F, '{ sum += $3 } END{ print "today calories: "sum }'
やっている事は単純で、入力に応じて 日付,食事内容,カロリー
形式でcsvを追記してゆくだけです。
# ログを見る
$ eat log 2 #第二引数は遡る行数。与えられなければ10行まで表示する
2020-03-31 11:20:08,サバ缶,400
2020-03-31 12:12:04,フルグラ,100
today calories: 1000
# ログを取る(記録する)
$ eat something 1 #第一引数に食べるもの、第二引数にカロリーを記入
2020-03-31 12:13:55,something,1
today calories: 1001
※ echo "alias eat=<スクリプトの絶対パス>" >> ~/.bash_profile & source ~/.bash_profile
みたいにalias設定した例。
まとめ
- 急激に変わる食事と生活をコントロールしましょう。
- 食事と仕事が一体化してると何食べたか忘れちゃうのでまずは食事内容の確認を
- グラフ化したい場合はログをそのままSpreadSheetやExcelでインポートすれば良いと思います
おまけ
で、図のようなグラフを作れます
列名 | 値 |
---|---|
A | csvからインポート |
B | csvからインポート |
C | csvからインポート |
D | 日付インクリメント |
E | =TEXT($D1, ">=YYYY/MM/dd") |
F | =TEXT($D1+1, "<YYYY/MM/dd") |
G | =SUMIFS(C1:C1000,A1:A1000,E1,A1:A1000,F1) |