summaryrefslogtreecommitdiff
path: root/strace-log-merge
blob: 8ab24091d4240fbc70f6b92591972506991ac5ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/sh

show_usage()
{
	cat <<__EOF__
Usage: ${0##*/} STRACE_LOG

Finds all STRACE_LOG.PID files, adds PID prefix to every line,
then combines and sorts them, and prints result to standard output.

It is assumed that STRACE_LOGs were produced by strace with -tt[t]
option which prints timestamps (otherwise sorting won't do any good).
__EOF__
}

if [ $# -ne 1 ]; then
	show_usage >&2
	exit 1
elif [ "$1" = '--help' ]; then
	show_usage
	exit 0
fi

logfile=$1

for file in "$logfile".*; do
	[ -f "$file" ] || continue
	suffix=${file#"$logfile".}
	[ "$suffix" -gt 0 ] 2> /dev/null ||
		continue
	pid=$(printf "%-5s" $suffix)
	# Some strace logs have last line which is not '\n' terminated,
	# so add extra newline to every file.
	# grep -v '^$' removes empty lines which may result.
	sed "s/^/$pid /" < "$file"
	echo
done \
| sort -s -k2,2 | grep -v '^$'

rc=$?
[ $rc -eq 1 ] &&
	echo >&2 "${0##*/}: $logfile: strace output not found"
exit $rc