I need to get the Date and commit results of a set of github in this format:
Date Commit
19 Mar 2015 b6959eafe0df6031485509c539e22eaf2780919c
1 Apr 2015 9a
You more-or-less never need grep | awk
as awk
can do the matching for you.
So grep Date: | awk '{print $4 " " $3 " " $6}'
can be rewritten as awk '/Date:/ {print $4 " " $3 " " $6}'
and grep commit | awk '{print $2}'
can be rewritten as awk '/commit/ {print $2}'
.
That should be enough to give you the first inklings of how to solve your problem.
Combine the awk scripts.
git log | awk '
# Print the header line (remove if you do not want it).
BEGIN {print "Date Commit"}
/^commit/ {
# Save the current commit
commit=$2
# Skip to the next line
next
}
/^Date:/ {
# Print the fields from the current line and the saved commit
print $4, $3, $6, commit
# Clear the saved commit Just in Case
commit=""
}
'
That being said you can get almost the format you want from git log
itself:
$ git log --format='%ad %H' --date=short
2015-03-19 b6959eafe0df6031485509c539e22eaf2780919c
2015-04-1 9a1f13339cc7d43930440c2350ea3060b72c8503
2015-04-1 1e76036421ca4d72c371182fc494af514911b099
Which you could convert to your desired output with some awk if you wanted. (Transposing the date fields is trivial, converting to the month names would require some more code/work.)
The "git log" command is powerful enough to handle this on its own. Play around with variations on this:
git log --date=iso --pretty=format:"date={%ad}, commit={%H}"
For me this outputs:
date={2014-12-12 14:14:23 -0800}, commit={75390af8bcd42c4dde6d841dc53f66a9ca91f460}
date={2014-12-09 18:53:32 -0800}, commit={8dcf9eb10611e6ac778e518cf37efb041c69f5b5}
date={2014-12-11 17:17:26 -0800}, commit={c3c1120b6dda6b317e1de5c7fe4eed7c8741ea1a}
To achieve the exact format you specified (though with the date formatted a bit more reasonably), try this:
git log --date=short --pretty=format:"%ad %H"
Which outputs things like:
2015-08-18 1d0ca5a596f02958c4ba8ff269def3f235c64495
2015-08-18 d92fc3ebb62d2ca3e24322db2b669fdaebde7ea1
2015-08-18 6ba3970620e19699c2969b1eed5c479b07b8908a
How about:
git log | awk '/^commit / { commit = $2 }
/^Date: / { printf "%s %s %s %s\n", $4, $3, $6, commit }'
Capture the commit information in the variable commit. When a date comes along, print the date and commit information.
It is often a bad idea to pipe the output of grep
to awk
; awk
is perfectly capable of doing the filtering that grep
does.
This would do
git log -5 --pretty=format:"%ad %H" | awk '{print $3, $2, $5, $7}'
10 Aug 2015 9fb4b1b5e7bcbc7f55e40ceae1758a7288673a51
10 Aug 2015 3d613862ca53787c97a42e8e2c37e09c8752b637
7 Aug 2015 727af2863dbe9f7b4da9189bc12f97a99aac5705
7 Aug 2015 1438b43b5755079bb3e62c819bfef2629d8336e9
7 Aug 2015 34303c19fb11482d66fc3c1102bc8d8b433af21a
You may be find your solution with pretty format ?
http://git-scm.com/docs/pretty-formats