程序员防骗指南:如何统计自己的加了多少班

最近因为个人原因离职,换了份工作,在和上一家公司结算工资的时候出了些bug,我个人感觉我平时加班还是比较多。每周加班最少四天,有时候甚至6天。我今年也是刚毕业来北京,虽说之前在学校有做过两年外包,但依旧单身。所以也没什么事,加班使我快乐,即能打发周末的无聊,也能混一天50块钱的加班餐补,而且还为公司项目作出了贡献,何乐而不为呢,总之一句话,加班使我快乐。但是这个加班是不给加班费的,意思就是可以调休假,年底的时候可以折算成工资。

后来,我干到第五个月的时候,因为个人原因,我就离职了。不要问我为什么,有一个男人曾经说过,员工离职无非两个原因:一是钱没到位,二是受委屈了。当这两点同时达到的时候,哪怕是世界上最好的公司,也没人愿意待的。

也就是我离职以后的五号,公司该结算工资了,我发现我的工资居然只比以前多了273块钱。我瞬间就感觉不可思议。觉得不科学,我哪怕多加班一天,工资也不止200来快啊。而后准备询问一下公司财务,发现微信被拒收了。而后我又去问人事,人事给我口述一大堆,我让截图给我,也是不愿意。我就感觉我可能被骗了。

那末问题来了,我如何知道我自己到底家了多少班呢???公司用的是linus开发的git来管理软件的,当然,我刚去的时候没人用git,都是我完善起来的。事实证明,这对我日后维权有着莫大的好处。

既然用的是git,那么我每一次提交代码都是有记录的,一个完整的git记录内容如下:

commit 78b2c07d52f0c567b8864eb2d0db25eb168822d0
Author: Pengfei-Gao <net.aifei8@gmail.com>
Date:   Thu Nov 16 10:06:16 2017 +0800

    add package-lock.json
...
复制代码

我们可以使用git的git log --author=username来打印出我提交代码的记录。然后就是找出我周末的提交记录,可以把git log的输出管道重定向到grep,使用grep来找出周末提交代码的记录,像下面这样子:

➜   git log --author=Pengfei-Gao | grep -E "Wed|Sun" 
Date:   Wed Nov 22 16:04:40 2017 +0800
Date:   Wed Nov 15 16:42:21 2017 +0800
...

复制代码

现在问题来了,同一天可能有多次提交,这样就会出现重复的记录,对统计造成一些麻烦,所以我们可以用awk来去掉单条记录的时、分、秒这些字段,然后用sort -k2n | uniq来去掉重复的记录,大概像下面这样子:

➜  git log --author=Pengfei-Gao | grep -E "Wed|Sun" | awk -F ' ' '{print $1,$2,$3,$4,$6}' | sort -k2n | uniq                      
Date: Sun Aug 20 2017
Date: Sun Aug 6 2017
Date: Sun Sep 24 2017

复制代码

到了这一步,剩下的就是我们加班并提交代码的日期了,我们在用awk统计一下记录数,也就是我们的加班天数,大概像下面这样子:

➜  git log --author=Pengfei-Gao | grep -E "Wed|Sun" | awk -F ' ' '{print $1,$2,$3,$4,$6}' | sort -k2n | uniq | awk 'END{print NR}'
17
复制代码

也是说,我为了维护这个项目,总共加班17天。那么在很多情况下,一个公司里面同一个人没可能要去维护好几个项目,这种情况该怎莫办呢?我们可以将所有项目的提交记录全部写入同一个名为commit_log的文件,然后像下面这样子:

➜   cat commit_log | grep -E "Wed|Sun" | awk -F ' ' '{print $1,$2,$3,$4,$6}' | sort -k2n | uniq | awk 'END{print NR}'
复制代码

就可以统计出你为了维护公司所有的项目所加班的天数了。我写了一个简单的shell脚本,名为count_my_overtime,内容如下:

#!/bin/bash
projects=$(ls -F | grep '/$')

for project in $projects; do
    # cursor
    cd $project && git log --author="$1" 1>> $(pwd)/../overtime_log
    cd ..
done

overtime_num=$(cat overtime_log | grep -E "Wed|Sun" | awk -F ' ' '{print $1,$2,$3,$4,$6}' | sort -k2n | uniq | awk 'END{print NR}')
echo "A: congratulations, $1. You have worked overtime about $overtime_num days"

rm overtime_log -f
复制代码

使用方法特别简单,将你维护的所有项目全部放在统一目录下,然后执行如下命令即可:

./count_my_overtime [you-user-name]
复制代码

刚才把证据拿给我们人事看了以后,我们人事说:”只有自个申请加班,并且领导签字同意了的才算加班“。也就是说我这17天白干了。加上我国庆中秋加班两天,也就是说,白干一个月(总共是17+2X3=23天的工作日,注意:劳动法规定,一个月的工作日只有21天),

转载于:https://juejin.im/post/5a2971b8f265da431876a652

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值