Я заново редактирую для ясности - спасибо всем за их ввод.
Я выполняю некоторую обработку файла сценариев с помощью awk и пытаюсь захватить значение временной метки, а затем задним числом применить его к журнал -
Пример журнала -
20191127:20:22:40 023116-[INFO]:-Starting backup of database wan
20191127:20:22:40 023116-[DEBUG]:-Creating backup directories
20191127:20:22:40 023116-[DEBUG]:-Getting database size
20191127:20:22:40 023116-[INFO]:-Backup Timestamp = 20191127202240
20191127:20:22:42 023116-[DEBUG]:-Beginning cleanup
20191127:20:22:42 023116-[DEBUG]:-Cleanup complete
20191127:20:22:42 023116-[INFO]:-Backup completed successfully
20191127:21:22:40 023116-[INFO]:-Starting backup of database tew
20191127:21:22:40 023116-[DEBUG]:-Creating backup directories
20191127:21:22:40 023116-[DEBUG]:-Getting database size
20191127:21:22:40 023116-[INFO]:-Backup Timestamp = 20191127212240
20191127:21:22:42 023116-[DEBUG]:-Beginning cleanup
20191127:21:22:42 023116-[DEBUG]:-Cleanup complete
20191127:22:22:40 023116-[INFO]:-Starting backup of database tree
20191127:22:22:40 023116-[DEBUG]:-Creating backup directories
20191127:22:22:40 023116-[DEBUG]:-Getting database size
20191127:22:22:40 023116-[INFO]:-Backup Timestamp = 20191127222240
20191127:22:22:42 023116-[DEBUG]:-Beginning cleanup
20191127:22:22:42 023116-[DEBUG]:-Cleanup complete
20191127:22:22:42 023116-[INFO]:-Backup completed successfully
В одном файле может быть несколько прогонов - я не могу использовать дату / время, потому что есть вероятность, что каталог создание может удалить sh с отметки времени резервного копирования.
Чтобы еще больше усложнить шаблон, резервное копирование всегда будет подвергаться очистке, но не всегда будет успешным.
Я пытался использовать awk для выполнения этого -
Если я использую:
awk '/Timestamp/{ f=$5 }{ if ( f!="" ) print f,$0 }
Тогда я не только пропущу первые 3 строки, но и буду в итоге пометим первые 3 строки следующего задания неправильным штампом.
Я думал, что смогу использовать getline, но он потребляет строки - и это не совсем верно из-за порядка обработки. ..
Желаемый вывод - пометить все рабочие строки меткой времени
20191127202240 20191127:20:22:40 023116-[INFO]:-Starting backup of database wan
20191127202240 20191127:20:22:40 023116-[DEBUG]:-Creating backup directories
20191127202240 20191127:20:22:40 023116-[DEBUG]:-Getting database size
20191127202240 20191127:20:22:40 023116-[INFO]:-Backup Timestamp = 20191127202240
20191127202240 20191127:20:22:42 023116-[DEBUG]:-Beginning cleanup
20191127202240 20191127:20:22:42 023116-[DEBUG]:-Cleanup complete
20191127202240 20191127:20:22:42 023116-[INFO]:-Backup completed successfully
20191127212240 20191127:21:22:40 023116-[INFO]:-Starting backup of database tew
20191127212240 20191127:21:22:40 023116-[DEBUG]:-Creating backup directories
20191127212240 20191127:21:22:40 023116-[DEBUG]:-Getting database size
20191127212240 20191127:21:22:40 023116-[INFO]:-Backup Timestamp = 20191127212240
20191127212240 20191127:21:22:42 023116-[DEBUG]:-Beginning cleanup
20191127212240 20191127:21:22:42 023116-[DEBUG]:-Cleanup complete
20191127222240 20191127:22:22:40 023116-[INFO]:-Starting backup of database tree
20191127222240 20191127:22:22:40 023116-[DEBUG]:-Creating backup directories
20191127222240 20191127:22:22:40 023116-[DEBUG]:-Getting database size
20191127222240 20191127:22:22:40 023116-[INFO]:-Backup Timestamp = 20191127222240
20191127222240 20191127:22:22:42 023116-[DEBUG]:-Beginning cleanup
20191127222240 20191127:22:22:42 023116-[DEBUG]:-Cleanup complete
20191127222240 20191127:22:22:42 023116-[INFO]:-Backup completed successfully
Я предполагаю, что самый простой способ - это буферизовать строки и затем задним числом применить временную метку -
Что-то сродни -
{
if ($0 ~ /Backup Timestamp/) {
timestamp = $NF; for (i=0; i<nb; i++) {
print timestamp,backup[i]
};
nb=0;
}
if (timestamp == "") {
backup[nb++] = $0
}
else {
print timestamp,$0
}
}