I am stuck in an edge case of the following command for Working with continuously appended log file in bash问题
的文字tail -f your_log_file|gawk '/RMS_REJECT/{key=$2":"$3;a[key]++;if (LK && LK != key){print LK,a[LK];delete a[LK]};LK=key}' FS='[-:]'
当我整天只有一个密钥实例并且LK!=密钥永远不会发生时,问题就出现了
tail -f your_log_file|gawk '/RMS_REJECT/{key=$2":"$3;a[key]++;if (LK && LK != key){print LK,a[LK];delete a[LK]};LK=key}' <last key LK to be taken from just tail -1 of your_log_file and not RMS_REJECT filtered> FS='[-:]'
有没有办法设置LK = "$2:$3"
正常(未经RMS_REJECT过滤)文件。基本上比较(RMS_REJECT的最后一个键和当前时间的最后一个键),从而解决了这个问题。
我尝试了tail -f $inputfile | awk 'BEGIN {FS='[-:]' ;LK=$2":"$3 }/RMS_REJECT/{key=$2":"$3;a[key]++;if (LK && LK != key){print LK,a[LK]+1;delete a}}' FS='[-:]'
我的第二次尝试
tail -f $inputfile | awk '/RMS_REJECT/{key=$2":"$3;a[key]++;print LK,key ;if (LK && LK != key){print key,a[key]+1;delete a}} /PATTERN2/{LK=$2":"$3; }' FS='[-:]'
假设模式2存在于每一行(不包含RMS_REJECT)
答案 0 :(得分:0)
Normaly你应该简单地在最后添加案例:
tail -f your_log_file|gawk '
/RMS_REJECT/{key=$2":"$3;a[key]++;if (LK && LK != key){print LK,a[LK];delete a[LK]};LK=key}
END {if ( !LK ){print LK,a[LK];delete a[LK]};LK=key}
' FS='[-:]'
但你在一个流上工作(所以没有结束) - &gt;你需要设置另一个触发器。 使用类似的东西(假设这里$ 1是YYYY / MM / DD之类的日期)
tail -f your_log_file|gawk '
NR==1 {LD=$1}
/RMS_REJECT/ {key=$2":"$3;a[key]++;if (LK && LK != key){print LK,a[LK];delete a[LK]};LK=key}
$1 != LD {if ( !LK ){print LK,a[LK];delete a[LK]};LK=key;LD=$1}
' FS='[-:]'