我有一个纯文本格式的文件:
On tick 95479102 total blocks 65
On tick 95479103 total blocks 66
On tick 95479104 total blocks 66
On tick 95479105 total blocks 66
On tick 95479106 total blocks 67
On tick 95479107 total blocks 67
On tick 95479108 total blocks 67
On tick 95479109 total blocks 67
On tick 95479110 total blocks 67
On tick 95479111 total blocks 67
On tick 95479112 total blocks 67
On tick 95479113 total blocks 68
On tick 95479114 total blocks 68
On tick 95479115 total blocks 68
On tick 95479116 total blocks 68
由于操作员的错误,一些其他日志也与此混在一起,因此现在有了以后的日志条目,如下所示:
On tick 95479541 total blocks 69
On tick 385 total blocks 124
On tick 130 total blocks 124
On tick 95479542 total blocks 69
On tick 386 total blocks 124
On tick 131 total blocks 124
On tick 95479543 total blocks 69
On tick 387 total blocks 124
On tick 388 total blocks 124
On tick 95479544 total blocks 69
On tick 132 total blocks 124
On tick 95479545 total blocks 69
我想弄清所有这一切,因为所有的报价都是连续的,我确信可以编写一个基本的,繁琐的Perl脚本来做到这一点-但有没有更简单的方法或CPAN库可能会有所帮助? / p>
答案 0 :(得分:1)
sort
并不复杂:
33,33%
(3是您要对记录进行排序的列,而<div class="dropdown-menu" aria-labelledby="themes">
<a class="dropdown-item" href="../default/">Default</a>
<a class="dropdown-item" href="../united/">United</a>
<a class="dropdown-item" href="../yeti/">Yeti</a>
</div>
.dropdown-menu {
display: flex;
width: 420px;
flex-wrap: wrap;
}
.dropdown-item {
width: 33,33%;
}
用于数字比较)
答案 1 :(得分:1)
Perl单缸套足以过滤噪声。
cat file.log | perl -e 'my $last; while(<>) { /On tick (\d+) total blocks \d+/; if (!$last || int($1) == $last+1) { print "$_"; $last = int($1) }; }'
请注意,脚本假定文件中的第一个刻度是有效的。
答案 2 :(得分:-1)
您可以使用sed
来过滤“按时”和“总计”之间正好8位数的行,如下所示:
sed -rn "/^On tick [0-9]{8} total/ p;" yourfile
说明
^
注意,我们仅在行首匹配p
表示打印匹配行-n
意味着没有显式p
命令就不会打印任何行[0-9]{8}
恰好匹配8位数字,为此我们需要选项-r
对输出感到满意时,可以将命令输出存储在另一个文件中。