ранг grep результат по отметке времени записей - PullRequest
0 голосов
/ 08 января 2020

Я хотел бы ранжировать записи журнала по отметке времени каждой записи.

скажем, мой результат grep такой: каждая запись имеет разное количество полей и время в различном количестве столбцов:

a, 3, time:123
b, time:124, 4
c, time:122, 5

как передать результат так, чтобы он выглядел следующим образом?

c, time:122, 5
a, 3, time:123
b, time:124, 4

Ответы [ 2 ]

1 голос
/ 08 января 2020

Общее решение:

  1. для каждой строки:
    • обнаружение формата журнала
    • извлечение столбца метки времени на основе обнаруженного формата
    • преобразование временная метка в сортируемую форму
    • печать сортируемой формы + разделитель столбцов + исходная строка
  2. конвейерный вывод предыдущего этапа во что-то, что сортируется по новому первому столбцу
  3. выводит данные предыдущего этапа во что-то, что снимает новый первый столбец
1 голос
/ 08 января 2020

Попробуете ли вы следующее:

while IFS= read -r line; do
   [[ $line =~ time:([0-9]+) ]] && printf "%s\t%s\n" "${BASH_REMATCH[1]}" "$line"
done < file | sort -n | cut -f 2-
  • Сначала извлекается время после подстроки time:.
  • Затем добавляется время до строки с использованием вкладки. в качестве разделителя.
  • Численно сортирует строки.
  • Наконец, оно обрезает 1-е поле.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...