Я встречал довольно много случаев использования, в которых было бы очень полезно принимать ввод из потока (обычно с разделителями новой строки) и резюмировать его в стиле, подобном верхнему (см. 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 и запустите на нем часы.