awk处理案例七--工时脚本
【场景】--工时脚本
这个是我对目前的公司上班制度;我写的工时脚本;为了确定本月工时是否足够;纯属玩弄!
需求:
1.上班采用弹性一个小时上班打卡(8:00--9:00);8:00之前打卡;算是8:00时刻打卡;9:00之后打卡算是迟到(目前这个脚本对迟到/请假不处理)
2.中午(12:00--13:30)是中饭时间;所以这个不计工时;
3.下班时间从17:30开始;(17:30--18:00)是晚餐时间;也不计工时。
4.加班到(20:30)有10块的晚餐补助!这个月的餐补有多少次?
5.一个月要保证每天有8H;这个月的平均上班时间是多少?
worktime.awk代码如下:
1 # 作者 li0924 2 # 先建两个函数ttos,stot;ttos函数将时间格式转换为X分;stot函数将X分转换为时间格式 3 function ttos(t) {split(t,a,":");b=a[1]*60+a[2]; return b} 4 function stot(s) {i=sprintf("%02d:%02d",int(s/60),int(s%60));return i} 5 #代码 6 BEGIN{ 7 h=60; 8 start1=8*h; 9 start2=9*h; 10 end1=17.5*h; 11 end2=18*h; 12 end3=20.5*h 13 } 14 { 15 j=ttos($3); 16 k=ttos($4); 17 #对忘记打卡/迟到/早退暂不作处理; 18 if(j==0||k==0||j>start2||k<end1) 19 { 20 n++; 21 } 22 if(j<start1) 23 { 24 j=start1; 25 } 26 if(k>=end1 && k<=end2) 27 { 28 k=end1; 29 all=k-j-1.5*h; 30 } 31 if(k>end2) 32 { 33 all=k-j-2*h; 34 } 35 if(k>=end3) 36 { 37 m++; 38 } 39 sum+=all; 40 #etime为每天有效工作时间 41 etime=stot(all); 42 print $0 FS etime; 43 } 44 END{ 45 print "The average daily working hours : " stot(int(sum/(NR-n))); 46 print "This month's meal supplement: " m " time" 47 }
测试结果如下:
kaoqing.txt
z0000019698 2013-09-01 07:23 18:23 z0000019698 2013-09-02 08:24 20:02 z0000019698 2013-09-03 08:25 20:25 z0000019698 2013-09-04 08:26 20:26 z0000019698 2013-09-05 08:27 20:17 z0000019698 2013-09-06 08:28 20:28 z0000019698 2013-09-07 08:29 20:29 z0000019698 2013-09-08 08:30 20:30 z0000019698 2013-09-09 08:31 20:31 z0000019698 2013-09-10 08:32 20:32 z0000019698 2013-09-11 08:33 20:33 z0000019698 2013-09-12 08:34 20:34 z0000019698 2013-09-13 08:35 20:35 z0000019698 2013-09-14 08:36 20:36 z0000019698 2013-09-15 08:37 20:37 z0000019698 2013-09-16 08:38 20:38 z0000019698 2013-09-17 08:39 20:39 z0000019698 2013-09-18 08:40 20:40 z0000019698 2013-09-19 08:41 20:41 z0000019698 2013-09-20 08:42 20:42 z0000019698 2013-09-21 08:43 20:43 z0000019698 2013-09-22 08:44 20:44 z0000019698 2013-09-23 08:45 20:45
[li0924@localhost awk]$ awk -f worktime.awk kaoqing.txt z0000019698 2013-09-01 07:23 18:23 08:23 z0000019698 2013-09-02 08:24 20:02 09:38 z0000019698 2013-09-03 08:25 20:25 10:00 z0000019698 2013-09-04 08:26 20:26 10:00 z0000019698 2013-09-05 08:27 20:17 09:50 z0000019698 2013-09-06 08:28 20:28 10:00 z0000019698 2013-09-07 08:29 20:29 10:00 z0000019698 2013-09-08 08:30 20:30 10:00 z0000019698 2013-09-09 08:31 20:31 10:00 z0000019698 2013-09-10 08:32 20:32 10:00 z0000019698 2013-09-11 08:33 20:33 10:00 z0000019698 2013-09-12 08:34 20:34 10:00 z0000019698 2013-09-13 08:35 20:35 10:00 z0000019698 2013-09-14 08:36 20:36 10:00 z0000019698 2013-09-15 08:37 20:37 10:00 z0000019698 2013-09-16 08:38 20:38 10:00 z0000019698 2013-09-17 08:39 20:39 10:00 z0000019698 2013-09-18 08:40 20:40 10:00 z0000019698 2013-09-19 08:41 20:41 10:00 z0000019698 2013-09-20 08:42 20:42 10:00 z0000019698 2013-09-21 08:43 20:43 10:00 z0000019698 2013-09-22 08:44 20:44 10:00 z0000019698 2013-09-23 08:45 20:45 10:00 The average daily working hours : 09:54 This month's meal supplement: 16 time
测试结果可以达到需求;

浙公网安备 33010602011771号