I solved the problem by running `scriptreplay` in a screen and the dumping the scrollback buffer to a file.
The following expect script does this for you.
It has been tested for logfiles with up to 250.000 lines. In the working directory you need your scriptlog, a file called "time" with 10.000.000 times the line "1 10" in it, and the script. I needs the name of your scriptfile as command line argument, like `./name_of_script name_of_scriptlog`.
#!/usr/bin/expect -f
set logfile [lindex $argv 0]
if {$logfile == ""} {puts "Usage: ./script_to_readable.exp \$logfile."; exit}
set timestamp [clock format [clock sec] -format %Y-%m-%d,%H:%M:%S]
set pwd [exec pwd]
if {! [file exists ${pwd}/time]} {puts "ERROR: time file not found.\nYou need a file named time with 10.000.000 times the line \"1 10\" in the working directory for this script to work. Please provide it."; exit}
set wc [exec cat ${pwd}/$logfile | wc -l]
set height [ expr "$wc" + "100" ]
system cp $logfile ${logfile}.tmp
system echo $timestamp >> ${logfile}.tmp
set timeout -1
spawn screen -h $height -S $timestamp
send "scriptreplay -t time -s ${logfile}.tmp 100000 2>/dev/null\r"
expect ${timestamp}
send "\x01:hardcopy -h readablelog.${timestamp}\r"
send "exit\r"
system sed '/^$/d' readablelog.$timestamp >> readablelog2.$timestamp
system head -n-2 readablelog2.$timestamp >> ${logfile}.readable.$timestamp
system rm -f readablelog.$timestamp readablelog2.$timestamp ${logfile}.tmp
The time file can be generated by
for i in $(seq 1 10000000); do echo "1 10" >> time; done