Re: [請益] 新手提問,擷取多行的問題
這樣有符合需求嗎?
#!/usr/bin/perl
while (<DATA>) {
next if (/^\n/);
if (/START/ ... /STOP/) {
if (/^(\d\d):(\d\d):(\d\d)\.(\d{3}).*(<--START|<--STOP|CONTACT)/) {
print "$1:$2:$3.$4 $5\n";
}
}
}
__DATA__
11:13:33.460 INFO <-- REGISTER <ID:12344>
11:13:33.460 INFO CONTACT: <ID:456788>
12:20:21.350 INFO <--START <ID:12344>
12:20:21.350 INFO CONTACT <ID:456788>
12:23:22.420 INFO <--STOP <ID:12344>
12:23:22.420 INFO CONTACT <ID:456788>
12:30:55.300 INFO <--ACK <ID:12344>
12:30:55.300 INFO CONTACT <ID:456788>
輸出:
12:20:21.350 <--START
12:20:21.350 CONTACT
12:23:22.420 <--STOP
※ 引述《sostmr (Nikki)》之銘言:
: 大家好,我最近剛接觸Perl不到一個月,有個問題一直困擾著我,請各位前輩不吝指教
: 我們最近在分析log,log大致的格式如下
: 11:13:33.460 INFO <-- REGISTER <ID:12344>
: 11:13:33.460 INFO CONTACT: <ID:456788>
: 12:20:21.350 INFO <--START <ID:12344>
: 12:20:21.350 INFO CONTACT <ID:456788>
: 12:23:22.420 INFO <--STOP <ID:12344>
: 12:23:22.420 INFO CONTACT <ID:456788>
: 12:30:55.300 INFO <--ACK <ID:12344>
: 12:30:55.300 INFO CONTACT <ID:456788>
: 我目前程式能分析出來Start ID&Time 和 Stop ID&Time,
: 但是最近被要求要多抓出START&STOP下面的CONTACT ID
: 以我目前的功力都只能擷取出單行單行,請問各位前輩有沒有什麼建議可以讓我抓<--STA
: RT時,也把下面幾行的CONTACT資料一起帶出來嗎?
: 因為單純抓CONTACT的話,可能會抓到REGISTER貨ACK的多餘資料,我只想要START&STOP的
: ...
: 我的程式目前設計如下:
: Open(File,"< $file");
: While ($line = <FILE>)
: {
: $line =~ s/\n/\r\n/g;
: $line =~ s/^\s+//g;
: @data = split(/\s+/,$line);
: If($line =~ /<-- START <ID:/)
: { $line=substr($data[7], 4, 9)
: Print "line\n";
: }
: 希望各位前輩提點一下,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.67.167.3
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1492596269.A.03F.html
推
04/19 23:03, , 1F
04/19 23:03, 1F
→
04/21 15:06, , 2F
04/21 15:06, 2F
→
04/21 15:07, , 3F
04/21 15:07, 3F
→
04/21 15:07, , 4F
04/21 15:07, 4F
→
04/21 16:16, , 5F
04/21 16:16, 5F
→
04/21 16:18, , 6F
04/21 16:18, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章