Bash добавить к концу файла (>>), если не дублировать строку

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

./runEvilProcess.sh >> ./evilProcess.log

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

Пример вывода:

QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key

Итак, у вас очень грязный журнал

Есть ли способ добавить строку в файл журнала , если строка не была добавлена ​​последним.

Плохой пример (но не уверен, как это сделать в bash)

$previousLine = ""
$outputLine = getNextLine()
if($previousLine != $outputLine) {
 $outputLine >> logfile.log
 $previousLine = $outputLine
}
2 ответа

Если процесс возвращает повторяющиеся строки в строке, проведите вывод вашего процесса через uniq:

$ ./t.sh 
one
one
two
two
two
one
one
 $ ./t.sh | uniq
one
two
one

Если журналы отправляются в стандартный поток ошибок, вам также необходимо перенаправить это:

$ ./yourprog 2>&1 | uniq >> logfile

(Это не поможет, если дубликаты поступают из нескольких прогонов программы, но затем вы можете передать свой файл журнала через uniq при его просмотре.)


Создайте фильтр script (filter.sh):

while read line; do
 if [ "$last" != "$line" ]; then
 echo $line
 last=$line
 fi 
done

и используйте его:

./runEvilProcess.sh | sh filter.sh >> evillog

licensed under cc by-sa 3.0 with attribution.