shithub: hours

ref: 662804331795230f76a836ce2db230317149d709
dir: /hours.awk/

View raw version
#!/bin/awk -f

function gettime(time) {
	hours = int(time / 3600)
	minute = int(int(time/60) % 60)
	sec = int(time % 60)
	return sprintf("%dh %dm %ds", hours, minute, sec);
}

BEGIN {
	FS="\t";
	sum=0;

	# print report table header tbl(1)
	printf ".TS\nbox expand;\n";
	printf "c c c c\n";
	printf "- s s s\n";
	printf "l l r l.\n";
	printf "From\tTo\tTime\tDescription\n";
	printf "\n";
}

$1 && $2 && $3 && !/^#/ {
	cmd = "date -f 'DD.MM.YYYY hh:mm:ss' "$1
	cmd | getline from
	close(cmd)
	cmd = "date -f 'DD.MM.YYYY hh:mm:ss' "$2
	cmd | getline to
	close(cmd)
	time = $2 - $1
	$1 = $2 = ""
	sub(/^ +/, "")
	sub(/ +$/, "")
	printf "%s\t%s\t%s\t%s\n", from, to, gettime(time), $0;
	sum += time;
}

END {
	printf ".T&\n";
	printf "- s s s\n";
	printf "l r r c.\n";
	printf "\n";
	printf "\tSum\t%s\t\n", gettime(sum);
	printf ".TE\n";
}