Назад | Перейти на главную страницу

Есть ли инструмент, который может улучшить входной поток?

Я встречал довольно много случаев использования, в которых было бы очень полезно принимать ввод из потока (обычно с разделителями новой строки) и резюмировать его в стиле, подобном верхнему (см. Top, iotop и т. Д.). Этакая сводная таблица на лету.

например Возьмите вход в стиле журнала:

I heard A from unit 1 and it said "Great!" 56
I heard A from unit 2 and it said "Oh no!" 42
I heard C from unit 1 and it said "Waiting for input." 33
I heard B from unit 3 and it said "Stopped." -1
...

Отсюда мы могли бы запустить инструмент с регулярным выражением и групповыми индикаторами:

topify [lineout] [regex] [name #1] [group #1] [name #2] [group #2] [All other columns name position]
     where:
         lineout is the number of lines before removing it from the display
         regex is a regex of the lines to match, complete with group indicators
         name #n is a string for the title of column n
         group #n is the number of the group in the regex

например

topify '/^I heard ([A-Z]) from unit ([1-9]) and it said "(.*)" ([-0-9]*)$/' Unit 2 Status 1 Message 3 RetVal 4

Это будет отображаться в интерактивном режиме, так что столбцы можно будет выбирать / переупорядочивать и т. Д .:

Unit Status Message            Retval
1    C      Waiting for input. 33
2    A      Oh no!             42
3    B      Stopped.           -1

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

Кто-нибудь видел такой инструмент?

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

Вам не нужно писать инструмент, стандартный набор инструментов unix отлично подойдет вам.

#!/bin/bash
echo -e 'Unit\tStatus\tMessage\t\t\tRetval'
cat /var/log/filename | awk '{match($0,"\".*\"",a)}{print $6 "\t" $3 "\t" a[0] "\t\t" $NF}' |sort -k<fieldnum>

Поместите это в файл .sh и запустите на нем часы.