以下是我必须在文件中解析的两行和 from first line
我需要提取"180000"
和第二行需要提取"49 , 59, 54 "
。
Line 1:
<Mon Aug 5 15:26:16:040.50 IST 2013> | <MNLOG> <Iteration : 1 Duration : 180000 seconds>
Line2:
<Mon Aug 5 15:26:16:044.93 IST 2013> | <MNLOG> <TestRunnerUnit - Remaining Time : 49 hours 59 min 54 sec >
我已编写代码,但我看起来很难编码。所以,如果有任何方法可以使用,请告诉我。
我的代码是:
if($line =~ m/Iteration\s+:\s+1\s+Duration/)
{
print"$line\n";
my @words = split(/ /,$line);
my $lengh = $#words;
$Start_Duration = $words[14];
}
if($line =~ m/Remaining\s+Time\s+:\s+\d+/)
{
my @words = split(/ /,$line);
my $lengh = $#words;
$Hours= $words[13]*3600;
$Minuts= $words[15]*60;
$Seconds= $words[17];
$Remaining_Time =$Hours+$Minuts+$Seconds;
}
记录:
====================================================================================================
<Mon Aug 5 15:26:16:040.50 IST 2013> | <MNLOG> <Iteration : 1 Duration : 180000 seconds>
====================================================================================================
<Mon Aug 5 15:26:16:042.11 IST 2013> | <MNLOG> <TestRunnerUnit - Total Weight : 34>
<Mon Aug 5 15:26:16:042.88 IST 2013> | <MNLOG> <TestRunnerUnit - Total Objects : 34>
<Mon Aug 5 15:26:16:043.87 IST 2013> | <MNLOG> <TestRunnerUnit - Random Number generated : 3>
<Mon Aug 5 15:26:16:044.40 IST 2013> | <MNLOG> <TestRunnerUnit - Next Test : VideoStreamingSMS_APstress>
<Mon Aug 5 15:26:16:044.93 IST 2013> | <MNLOG> <TestRunnerUnit - Remaining Time : 49 hours 59 min 54 sec >
<Mon Aug 5 15:26:16:045.64 IST 2013> | <DBLOG> <TestRunnerUnit - Test Suite : concurrency_tests>
<Mon Aug 5 15:26:16:046.26 IST 2013> | <DBLOG> <TestRunnerUnit - Running the test : VideoStreamingSMS_APstress>
<Mon Aug 5 15:26:16:046.81 IST 2013> | <DBLOG> <TestRunnerUnit - Timeout for the test : 1500>
<Mon Aug 5 15:26:16:050.04 IST 2013> | <DBLOG> <TestRunnerUnit - Parameters : 1>
<Mon Aug 5 15:30:39:760.21 IST 2013> | <MNLOG> <TestRunnerUnit - Random Number generated : 13>
<Mon Aug 5 15:30:39:760.69 IST 2013> | <MNLOG> <TestRunnerUnit - Next Test : CamcorderNoUsb_APstress>
<Mon Aug 5 15:30:39:761.01 IST 2013> | <MNLOG> <TestRunnerUnit - Remaining Time : 49 hours 55 min 31 sec >
<Mon Aug 5 15:30:39:761.28 IST 2013> | <DBLOG> <TestRunnerUnit - Test Suite : nousb_tests>
<Mon Aug 5 15:30:39:761.54 IST 2013> | <DBLOG> <TestRunnerUnit - Running the test : CamcorderNoUsb_APstress>
<Mon Aug 5 15:30:39:761.77 IST 2013> | <DBLOG> <TestRunnerUnit - Timeout for the test : 1500>
<Mon Aug 5 15:30:39:762.01 IST 2013> | <DBLOG> <TestRunnerUnit - Parameters : 1>
<Mon Aug 5 15:30:40:017.74 IST 2013> | <MNLOG> <TestRunnerUnit - Test Case : CamcorderNoUsb_APstress>
<Mon Aug 5 15:30:40:018.47 IST 2013> | <DBLOG> <TestRunnerUnit - uses spiderboard: 0>
<Mon Aug 5 15:32:34:136.59 IST 2013> | <MNLOG> <TestRunnerUnit - Random Number generated : 13>
<Mon Aug 5 15:32:34:137.16 IST 2013> | <MNLOG> <TestRunnerUnit - Next Test : WallpaperToggle_APstress>
<Mon Aug 5 15:32:34:137.60 IST 2013> | <MNLOG> <TestRunnerUnit - Remaining Time : 49 hours 53 min 36 sec >
<Mon Aug 5 15:32:34:137.92 IST 2013> | <DBLOG> <TestRunnerUnit - Test Suite : feature_tests>
<Mon Aug 5 15:32:34:138.15 IST 2013> | <DBLOG> <TestRunnerUnit - Running the test : WallpaperToggle_APstress>
<Mon Aug 5 15:32:34:138.38 IST 2013> | <DBLOG> <TestRunnerUnit - Timeout for the test : 1500>
<Mon Aug 5 15:32:34:138.61 IST 2013> | <DBLOG> <TestRunnerUnit - Parameters : 3>
<Mon Aug 5 15:32:34:392.25 IST 2013> | <MNLOG> <TestRunnerUnit - Test Case : WallpaperToggle_APstress>
<Mon Aug 5 15:32:34:392.97 IST 2013> | <DBLOG> <TestRunnerUnit - uses spiderboard: 0>
<Mon Aug 5 15:32:36:395.53 IST 2013> | <MNLOG> <Installation - Waking the Device up and Unlocking it>
<Mon Aug 5 15:32:36:396.17 IST 2013> | <DBLOG> <KeyMap_APstress - ADB keyevent : 6>
<Mon Aug 5 15:33:36:407.53 IST 2013> | <DBLOG> <APStress_Command - Timeout on command: adb shell input keyevent 6>
答案 0 :(得分:2)
这个程序可以帮到你。如果没有看到完整的文件,就无法确定需要对行进行多少验证,因此您可能需要更复杂的正则表达式来检查是否正在处理正确的行。
在变量名中使用大写字母是可疑的做法,因为它们通常保留给Perl代码中的常量,如包名。
use strict;
use warnings;
use feature 'say';
my $start_duration;
my ($hours, $minutes, $seconds);
while (<DATA>) {
if (/Duration\s*:\s*(\d+)\s*seconds/) {
$start_duration = $1;
}
elsif (/Remaining Time\s*:\s*([^>]+)/) {
($hours, $minutes, $seconds) = $1 =~ /\d+/g;
}
}
say $start_duration;
say join ', ', $hours, $minutes, $seconds;
__DATA__
<Mon Aug 5 15:26:16:040.50 IST 2013> | <MNLOG> <Iteration : 1 Duration : 180000 seconds>
<Mon Aug 5 15:26:16:044.93 IST 2013> | <MNLOG> <TestRunnerUnit - Remaining Time : 49 hours 59 min 54 sec >
<强>输出强>
180000
49, 59, 54