我有以下信息的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