Часто с помощью script
и scriptreplay
мне интересно, существуют ли инструменты для манипулирования результирующими файлами.
Sample (От Как профилировать сценарий командной оболочки bash при медленном запуске? ):
script -t script.log 2>script.tim -c 'bash -x -c "
for ((i=3;i--;));do sleep .1;done
for ((i=2;i--;)) ;do
tar -cf /tmp/test.tar -C / bin
gzip /tmp/test.tar
rm /tmp/test.tar.gz
done
"'
Тогда есть два файла:
-rw-r--r-- 1 user user 472 Sep 25 10:44 script.log
-rw-r--r-- 1 user user 213 Sep 25 10:44 script.tim
И я могу воспроизвести сценарий:
scriptreplay --timing script.tim --typescript script.log 10
с помощью 10
как делитель времени выполнения для ускорения воспроизведения в 10 раз или
scriptreplay --timing script.tim --typescript script.log .1
для замедления воспроизведения в 10 раз.
Интересно, существуют ли такие инструменты, как:
Ну, оттуда:
cut -d \ -f1 <script.tim | xargs | tr \ + | bc
3.616809
выдаст общее время выполнения или если строк слишком много:
cut -d \ -f1 <script.tim | xargs | tr \ + | bc | xargs | tr \ + | bc
3.616809
и
cut -d \ -f2 <script.tim | xargs | tr \ + | bc
366
sed '1d;$d' script.log |wc -c
367
до проверьте общий размер выходного скрипта .(sed
отбросить первую и последнюю строки журнала, которые содержат: Script started on Wed Sep 25 14:40:20 2019
и Script done on Wed Sep 25 14:40:23 2019
.)
Затем вычисление размера журнала (указателя) в какое-то время :
perl -e 'my ($l,$t,$p)=(0,0,0); # line totTime pos
open FH,"<".$ARGV[0] || die;
while (<FH>) {
my ($d,$n)=split" "; # duration numBytes
$l++;
$t+=$d;
$p+=$n;
$t>=${ARGV[1]} && do {
print $l." ".$p."\n";
exit 0;
};
};' script.tim 1.2
12 216
Строка 12 в файле синхронизации (head -n 12
) и позиция байта 216 в файле машинописи (head -c 216
).
Или, если я ищу истекшее время до какой-то строки :
grep -ob 'tar.*test' script.log
217:tar -cf /tmp/test
320:tar -cf /tmp/test
perl -e 'my ($l,$t,$p)=(0,0,0);open FH,"<".$ARGV[0] || die;while (<FH>) {
my ($d,$n)=split" ";$l++;$t+=$d;$p+=$n;$p>=${ARGV[1]} && do {
print $l." ".$p."\n";exit 0;};};' script.tim 217
17 228
head -n 17 script.tim | cut -d \ -f1 | xargs | tr \ + | bc
1.091276
Что-то легче!?