bash: добавлять столбец каждые n секунд

Я получил вывод, как это:

0.000
0.002
0.000
0.002
0.000
0.026
=====
0.026

Обратите внимание, как последняя строка (0.026) является временем окончания предыдущих фаз. Я буду повторять эту команду каждые n секунд, и я хочу, чтобы следующий вывод записывался в следующий столбец, например:

0.000   0.000
0.002   0.001
0.000   0.000
0.002   0.001
0.000   0.000
0.026   0.027
=====   =====
0.026   0.028

Я знаю кое-что с sed -i решит мою проблему, но я просто не могу заставить ее работать. Поскольку очень важно иметь одинаковую метку времени для этого значения, я не могу выполнить команду, за которой следует следующая, а затем записать результаты на их место.

Команда, которая дает мне эти значения:

curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null -s http://linux.com/

2 ответа

С помощью paste и подстановка команд, вы можете добавить новый столбец рядом с предыдущим выводом, сохраненным в любом файле:

paste -d '\t' prevfile.out <(                                                                        
curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n=====================\nTotal time:\t%{time_total}\n' -o /dev/null -s http://linux.com/
)

Это сгенерирует этот вывод:

Lookup time:    0.005   Lookup time:    1.528
Connect time:   0.387   Connect time:   1.788
PreXfer time:   0.387   PreXfer time:   1.788
StartXfer time: 0.797   StartXfer time: 2.059
=====================   =====================
Total time: 0.797   Total time: 2.059

Программы оболочки работают по строкам - вы можете вернуться к началу самой последней строки и переписать ее в bash, напечатав возврат каретки (\r, например echo -en "print this \roverwrite with this"), но вы не можете сделать это для строк до самой последней.

Вы не сможете получать многострочные обновления для вывода терминала напрямую.

Лучшим вариантом было бы написать какую-нибудь вторичную программу (возможно, проще написать что-то отличное от сценариев bash), которая берет два файла и добавляет каждую строку от второй к соответствующей строке от первого. Затем сохраняйте каждый новый столбец во временном файле и запускайте эту дополнительную программу с учетом некоторого базового файла (начинается с пустого) и нового временного файла при каждом сохранении нового столбца. Сложите их все вместе и посмотрите на окончательный файл после.

Другие вопросы по тегам