Скрипт для добавления метки времени в каждой строке в случае отсутствия метки времени - PullRequest
0 голосов
/ 22 ноября 2018

В журналах GC каждая строка имеет метку времени в начале.но иногда нам не хватает этого.

Я ищу сценарий bash, который проверяет, отсутствует ли временная метка, и вначале добавит некоторую статическую временную метку.

В приведенном ниже примере есть 2 строки.1-я строка имеет временную метку, а вторая - нет.

2018-11-22T11:58:39.381+0100: 79412.217: [GC (Allocation Failure) 2018-11-22T11:58:39.381+0100: 79412.217: [ParNew: 1265865K->36835K(1380160K), 0.1419160 secs] 23560553K->22332825K(29206784K), 0.1421816 secs] [Times: user=2.39 sys=0.00, real=0.14 secs] 
79412.947: [GC (Allocation Failure) 2018-11-22T11:58:40.112+0100: 79412.947: [ParNew: 1263651K->36868K(1380160K), 0.1502318 secs] 23559641K->22334516K(29206784K), 0.1504887 secs] [Times: user=2.47 sys=0.00, real=0.15 secs] 
  1. Основное требование - добавить временную метку в каждую строку, если она отсутствует.
  2. Advance: В случае отсутствия временной метки, есть одно относительное время (79412.947) в формате эпохи.Я хочу добавить некоторое статическое время эпохи для каждого относительного времени и добавить в начале.

Например, во 2-й строке: 79412.947 + 153434343 = некоторое значение.Преобразуйте это значение в формат метки времени и добавьте в начале.

Regex для извлечения метки времени.https://regex101.com/r/3CtU4y/1/

Любые предложения, полезные советы приветствуются.Заранее спасибо.

1 Ответ

0 голосов
/ 22 ноября 2018

Первое предположение заключается в том, что bash, вероятно, не самый лучший выбор, если у вас много журналирования.

Кроме того, написание сценариев в значительной степени выполняет именно то, что требуется.Таким образом, это будет:

1) установить цикл для чтения строк ввода

#!/bin/bash
cat $* | while read line ; do

2) проверить, начинается ли строка ввода с отметки времени (не надо было искатьукажите регулярное выражение.

if echo "$line " | grep '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]' ; then
    true

Обратите внимание, что, если условие истинно, grep выведет строку, поэтому для этого не требуется отдельное эхо.

3) В противном случае выполнитенекоторые вещи с отметкой времени эпохи, которые я не совсем понимаю, что вы хотите:

else
    estamp=$(echo "$line" | sed 's/:.*//')
    rol=$(echo "$line" | sed 's/[0-9.]*://)
    # Do something with adding to the timestamp that I did not grasp
    echo "$estamp:$rol"
fi

Или что-то в этом роде.

О да, закройте цикл

done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...