2017-04-27 17 views
0

我被困在下面的命令的边缘情况下Working with continuously appended log file in bash问题awk中使用多个变量,从不同的正则表达式

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关键的只有1个实例,就会出现问题!=关键从未发生过

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

但你在一个流中工作(所以没有结束normaly) - >你nee d来设置另一个触发器。 使用类似(这里假设$ 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='[-:]' 
+0

我想我只需要在末尾放置'LK = hh:mm' !还是有什么我失踪?我真的不明白'你的情况正在做'$ 1!= LD {if(!LK){print LK,a [LK]; delete a [LK]}; LK = key; LD = $ 1} – pythonRcpp

+0

第一条评论:没有你的日志文件的样本,所以没有想法的内容和结构,我认为日期首先也许也是许多日志文件中的第二个字段。在这种情况下,$ 1!= LD是在一天处理后的第一个事件发生时的日变化触发($ 1是假设的一天)。代码与以前的打印相同+ LD(Last Date变量)的重置 – NeronLeVelu

+0

示例日志文件在问题链接中存在。你是正确的,每一行都以时间开始,$ 2“:”$ 3将生成一个hh:mm键。我更新了我应该工作但仍然有问题的最后一次尝试。基本上我说的是key1来自包含RMS_REJECT的行,而LK来自包含一些pattern2的行。 – pythonRcpp