通常我会在我的服务器上运行的进程使用类似的东西
./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
}
答案 0 :(得分:5)
如果流程连续返回重复行,请通过uniq
管道流程输出:
$ ./t.sh
one
one
two
two
two
one
one
$ ./t.sh | uniq
one
two
one
如果将日志发送到标准错误流,您还需要重定向:
$ ./yourprog 2>&1 | uniq >> logfile
(如果重复项来自程序的多次运行,这将无济于事 - 但在审核时,您可以通过uniq
管道日志文件。)
答案 1 :(得分:3)
创建过滤器脚本(filter.sh
):
while read line; do
if [ "$last" != "$line" ]; then
echo $line
last=$line
fi
done
并使用它:
./runEvilProcess.sh | sh filter.sh >> evillog