Regexp查找计数序列中的中断

kzipqqlq  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(101)

在Windows 10上,我有一个运行了数千个周期的系统的大日志(最多几兆字节),每个周期输出一行-除了在某些情况下。此行以循环编号开始。
我想找到没有行输出的情况,这相当于我想找到两个在周期数方面不连续的输出(之间的周期将是无声的,而我正在寻找的周期)。

2345, <data>
2346, <data>
2347, <data>
2349, <data>

在这个例子中,2349不是2347之后的下一个数字,因此周期2348是无声的。
如何使用regexp来实现这一点,比如说在Notepad++中?或者,如何以其他方式轻松地做到这一点,也许是在命令行中(即批处理脚本),也许是使用一些不需要太多环境的简单脚本语言?我不认为我有任何安装以外的python(我可以写一个python脚本自己-但想别的东西)。
我可以写一个10倍的OR语句,其中,对于循环数的每个最后可能的数字,下一行必须以一个循环数开始,并以下一个数字结束。(在9的情况下为0)。但这有点笨重和丑陋。

nwwlzxa7

nwwlzxa71#

我想用增强型文本编辑器EmEditor的J模式来处理。很容易理解进展。
共3步:
1.按Ctrl+H打开替换对话框,键入搜索和替换表达式。
1.单击按钮“高级...”,然后激活选项
“正则表达式“.”可以匹配换行符”
假设日志文件有10000行,那么不要忘记设置
“用于搜索正则表达式的其他行:“
10000,EmEditor会将整个文件视为一个字符串。
1.点击“提取”按钮以获得所需结果。

正则表达式:

查找:^.+$
更换:\J var str=""; arr="\0".match(/\d+/g); for(var i=arr[0]; i<=arr[arr.length-1]; i++){if("\0".search(i)<0){str=str+i+"\n";"Lost number are: \n"+str;}}

Replace表达式解释:\J为J模式,是必不可少的前缀。对于该表达式,使用以下方式帮助理解:

var str="";              //declare a string varible str for output
arr="\0".match(/\d+/g);      //match all numbers in the file and write into an array "arr"
    for (var i=arr[0]; i<=arr[arr.length-1]; i++) //Loop from first element to last element, arr[0]-arr[arr.length-1]
    {
        if("\0".search(i)<0)        //search number in the file, if can't find then send to str
        {
        str=str+i+"\n";         //missing number will add to string "str"
        "Lost number are: \n"+str; //output missing number
        }
    }

请看截图。

evrscar2

evrscar22#

使用bash shell的解决方案(无正则表达式):

comm -1 -3 <(cut -d, -f1 FILENAME | sort) <(seq "$(head -n1 FILENAME | cut -d, -f1)" "$(tail -n1 FILENAME | cut -d, -f1)" | sort) | sort -n

将输出缺少的数字。
这是通过让comm比较2个排序列表并只显示第一个列表唯一的项来实现的。
(第二个列表中唯一的项被-2抑制,两个列表中共有的项被-3抑制)
第一个列表是从FILENAME中提取的第一个“列”。第二个列表是seq基于FILENAME中的第一行(“最低”数字)和最后一行(“最高”数字)生成的顺序号的排序列表
关于FILENAME内容的假设:

  • 每一行都以一个数字开头,后跟,(<data>是单行)
  • 第一行是最小的数字(没有前导空格)
  • 最后一行是最大的数字(没有前导空格)

如果要指定要手动检查的范围(例如1000到3000),使用这个:

comm -1 -3 <(cut -d, -f1 FILENAME | sort) <(seq 1000 3000 | sort) | sort -n

相关问题