Re: [請益] 新手提問,擷取多行的問題

看板Perl作者 (JK)時間7年前 (2017/04/19 18:04), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/2 (看更多)
這樣有符合需求嗎? #!/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
推喔!好強大的 three dots range operator(常常會忘記)
04/19 23:03, 1F

04/21 15:06, , 2F
哇,結果是我要的!謝謝大大
04/21 15:06, 2F

04/21 15:07, , 3F
但是我有個問題想請教一下,我有辦法帶出後面id:123444
04/21 15:07, 3F

04/21 15:07, , 4F
嗎,我在後面加$6$7都沒有辦法帶出來
04/21 15:07, 4F

04/21 16:16, , 5F
加在CONTACT)後面 .*(ID:\d{1,})>$/
04/21 16:16, 5F

04/21 16:18, , 6F
print $6 ;
04/21 16:18, 6F
文章代碼(AID): #1OzpOj0_ (Perl)
討論串 (同標題文章)
文章代碼(AID): #1OzpOj0_ (Perl)