我需要从脚本日志中保留警告,并在每次启动后向每行添加“LAST”,以便我知道警报何时一目了然,所以我将其添加到我的脚本中: 这是我脚本的第一行:
echo "$( cat $ALERT_LOG_FILE | grep WARNING | tail -n 2k | ts "LAST ")" > $ALERT_LOG_FILE
脚本日志在首次运行时看起来像这样:
WARNING : ...
WARNING : ...
WARNING : ...
WARNING : ...
当脚本启动/重启时,回显线为每一行添加“LAST”并使其如下所示:
LAST WARNING : ...
LAST WARNING : ...
LAST WARNING : ...
LAST WARNING : ...
问题是一些重启后日志文件变成这样:
LAST LAST LAST LAST WARNING : ....
LAST LAST LAST WARNING : ....
LAST LAST WARNING : ....
LAST LAST WARNING : ....
LAST WARNING : ....
WARNING:
任何方式使它像这样:
LAST 4 WARNING : ....
LAST 3 WARNING : ....
LAST 2 WARNING : ....
LAST 2 WARNING : ....
LAST 2 WARNING : ....
LAST 1 WARNING : ....
WARNING:
编辑:
使用@Yoda建议的代码:
cat $LOG_FILE | grep WARNING | tail -n 2k | ts "LAST " | awk '{n=gsub("LAST ",X);if(n) print "LAST",n,$0;else print}')" > $LOG_FILE
在使用@Yoda建议重新启动后输出日志:
LAST 2 2 1 WARNING : ...
LAST 2 1 WARNING : ...
LAST 1 WARNING : ...
WARNING : ...
答案 0 :(得分:0)
基于一些假设: -
$ awk '{n=gsub("LAST ",X);if(n) print "LAST",n,$0;else print}' file
LAST 4 WARNING : ....
LAST 3 WARNING : ....
LAST 2 WARNING : ....
LAST 2 WARNING : ....
LAST 1 WARNING : ....
WARNING:
如果这不是你想要的,那么我建议发布你的日志文件和预期输出的代表性样本。
答案 1 :(得分:0)
这可能有所帮助: -
awk '
{
n = gsub("LAST ",X)
if( n )
{
for ( i = 1; i <= NF; i++ )
{
if ( $i ~ /WARNING/ )
{
sub(/^ */,X)
print "LAST",n,$0;
next
}
if ( $i ~ /^[0-9]$/ )
{
n += $i
$i = ""
}
}
}
else
print $0
}
'