我有以下信息的XML文件,我计算在XML文件中的停顿中值:如何使用Perl
<Key Time="54288" Type="insert" Value="E" />
<Key Time="55288" Type="insert" Value="A" />
<Key Time="58298" Type="insert" Value="H" />
<Key Time="58398" Type="insert" Value="A" />
<Key Time="58498" Type="insert" Value="L" />
<Key Time="59298" Type="insert" Value="L" />
<Key Time="64298" Type="insert" Value="O" />
我首先需要计算每个Key
项之间的总暂停时间,但只有当暂停(自上次Time
以来的时间间隔)等于或高于2400.
为此我得到了下面的脚本,它也显示了暂停开始的时间。
perl -nle '
/<Key +Time\s*=\s*"([0-9]+)\s*"/ and push @nums,$1;
END{
for(1..$#nums){
$pause=$nums[$_]-$nums[$_-1];
$pause >=2400 ? print "$pause started at ".$nums[$_-1] :()
}
}' your_file_here > output_file
此输出
3010 started at 55288
5000 started at 59298
然而,现在我需要提高脚本来检索以两种> = 2400-长时间暂停之间的所有值,也包括其中的暂停开始的值。例如,从Time="54288"
到Time="55288"
我有EA
;从Time="58298"
到Time="59298"
我有HALL
等
我不明白这一点。您现有的脚本会找到从A到H以及另一个从L到O的停顿,对不对?所以,如果你的新脚本应该找到包含停止开始和停止停止的信件,你应该得到AHAL,当然? –
顺便说一句,为了理解你的问题,并且容易检查答案,最好编辑问题并使用独特的字母! –
@Mark:我想*想要的是'value'属性*的列表,按时间间隔> = 2400分隔,所以'EA','HALL','O'。至少这就是我的答案!如果是这样,那么创建'HALL'的范围的最终值有一个错字,应该是'59298'而不是'64298'。我已经解决了这个问题,希望我是对的。 – Borodin