Добавление к конкретным файлам записей системного журнала

Хорошо, я нашел ответ здесь

If you create a file underneath ~ which is readable by others and then create a hard link to this file in an accessible path, they'll be able to read it regardless of the permissions on ~.

3
30.11.2020, 15:29
2 ответа

Сохранить последнюю строку существующего целевого файла. А затем проанализируйте файл системного журнала в обратном порядке с помощью awkи некоторой помощи из tac:

.
p=$(tail -n1 output)
tac syslog | awk -v p="$p" '$0 == p{exit} /myentry/' | tac >> output

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


Также держите в своем наборе инструментов эту простую эффективную команду:

awk '!seen[$0]++' output > output.tmp && mv output.tmp output

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

1
18.03.2021, 22:46

Вот простой подход:

$ awk 'NR==FNR{a[$0]++; next}/myentry/ &&  !a[$0]' myentries syslog 
Jan 17 13:03:18 stm32mp1-abc user.info myentry[14300]: Init complete

Это выбирает новую совпадающую строку, поэтому все, что вам нужно сделать, это перенаправить на исходный файл:

awk 'NR==FNR{a[$0]++; next}/myentry/ &&  !a[$0]' myentries syslog >> myentries
1
18.03.2021, 22:46

Теги

Похожие вопросы