apply @procrat's tweaks of my accumulation

This commit is contained in:
Felix Van der Jeugt 2016-02-22 09:02:34 +01:00
parent 6a2d6ac2a5
commit 1276e5fe76
1 changed files with 1 additions and 46 deletions

View File

@ -1,46 +1 @@
#!/usr/bin/env bash
#
# Assumes file descriptor 3 is not messed with in the profiled script.
pid=$$
exec 3>&2 2> >(tee /tmp/bash_profile-${pid}.log | \
sed -u 's/^.*$/now/' | \
date -f - +%s.%N >/tmp/bash_profile-${pid}.tim)
set -x
. "$@"
set +x
exec 2>&3 3>&-
paste <(
while read tim ;do
crt=000000000$((${tim//.}-10#0$last))
printf "%12.9f\n" ${crt:0:${#crt}-9}.${crt:${#crt}-9}
last=${tim//.}
done < /tmp/bash_profile-${pid}.tim
) /tmp/bash_profile-${pid}.log > ${pid}.timings
accumulator='
{
sum[$2] += $1
count[$2] += 1
}
END {
printf("command\ttotal\ttimes\taverage\n")
for (key in sum) {
printf("%s\t%f\t%d\t%f\n", key, sum[key], count[key], sum[key] / count[key])
}
}
'
paste \
<(cut -f1 ${pid}.timings) \
<(cat /tmp/bash_profile-${pid}.log \
| sed '/\] *=/c [[assignement]]' \
| sed -n 's/++* \([^ ]*\).*/\1/p' \
| sed '/=/c [[assignment]]') \
| > ${pid}.acc awk "$accumulator"
rm /tmp/bash_profile-${pid}.{tim,log}
echo ${pid}.timings
https://raw.githubusercontent.com/Procrat/dotfiles/6ef58e3a39a4cb79a15d8db7efa571ac9fe2d59b/bin/profile_bash.sh