awk using multiple variable from different regex

时间:2017-04-27 06:59:33

标签: bash awk

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)

1 个答案:

答案 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='[-:]'