Last active 1734276243

Revision 674e4fbb58e666475a05a55a587c7e3c26755d38

punchcard.awk Raw
1#!/usr/bin/awk -f
2#
3# punchcard.awk - ASCII 'punchcard' graph for git log
4#
5# Written in September 2011 by Andreas Jaggi <andreas.jaggi@waterwave.ch>
6#
7# usage:$ git log | punchcard.awk
8# +-------------------------------------------------------------------------------------------------+
9# Tue | . . o . . o O O 0 O |
10# Wed | . . . . 0 O o |
11# Thu | . . o O . . o o . . . |
12# Fri | . . . . O o o |
13# Sat | . . O . |
14# Sun | . O o . o o o o o . . |
15# Mon | . . . . . . . . o O O . . o 0 |
16# +-------------------------------------------------------------------------------------------------+
17# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
18#
19BEGIN {
20 days[1] = "Mon";
21 days[2] = "Tue";
22 days[3] = "Wed";
23 days[4] = "Thu";
24 days[5] = "Fri";
25 days[6] = "Sat";
26 days[7] = "Sun";
27
28 for (d in days) {
29 for ( h = 0; h < 24; h++ ) {
30 data[days[d],h] = 0;
31 }
32 }
33 max = 0;
34}
35/Date:/{
36 split($5,m,":");
37 data[$2,(1*m[1])] = data[$2,(1*m[1])]+1;
38 if ( data[$2,(1*m[1])] > max ) {
39 max = data[$2,(1*m[1])];
40 }
41}
42END {
43 printf(" +");
44 for ( h = 0; h < 24; h++ ) {
45 printf("----", h);
46 }
47 printf("-+\n");
48 for (d in days) {
49 printf("%s |", days[d]);
50 for ( h = 0; h < 24; h++ ) {
51 v = (4.0*data[days[d],h])/(max*1.0);
52 if ( v <= 0 ) {
53 printf(" ");
54 }
55 if ( (v > 0) && (v < 1) ) {
56 printf(" . ");
57 }
58 if ( (v >= 1) && (v < 2) ) {
59 printf(" o ");
60 }
61 if ( (v >= 2) && (v < 3) ) {
62 printf(" O ");
63 }
64 if ( (v >= 3) ) {
65 printf(" 0 ");
66 }
67 }
68 printf(" |\n")
69 }
70 printf(" +");
71 for ( h = 0; h < 24; h++ ) {
72 printf("----", h);
73 }
74 printf("-+\n ");
75 for ( h = 0; h < 24; h++ ) {
76 printf("%- 3d ", h);
77 }
78 printf("\n");
79}