로그 파일에서 교통 허브 및 연결에 대한 데이터를 추출하고 싶습니다. 로그 예:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
Stage Suffix for Offset Optimizer 1
Double Cycle Initially ? N Force Single / Double Cycling status ? N
Double Cycle Group 00 Double Cycle Ignore ? N
Allow Link Max Saturation N Link Max Sat Override N
Stages 1 2 3 4
Fixed N N N Y
LRT stage N N N N
Skip allowed N N N N
Ped stage N N N N
Ped invite N N N N
Ghost stage N N N N
Offset authority pointer 0 Split authority pointer 0
Offset opt emiss weight 000 I/green feedback inhibit N
Bus Authority 00 ACIS node 00000
Bus Mode - Central extensions N Local extensions N Recalls N
Stage skipping N Stage truncation N Cancels N
Bus Priority Selection - Multiple buses N Queue Calculation N
Hold recall if faulty N Disable recall N Disable long jtim N Real Cancel N
Bus recall recovery type 0 Bus extension recovery type 0
Offset Bus authority pointer 0 Split Bus authority pointer 0
Bus skip recovery 0 Skip importance factor 0
Bus priority status OFF
LRT sat 1 000 LRT sat 2 000 LRT sat 3 000
PEDESTRIAN FACILITIES
Ped Node N Num Ped Wait Imp Factor 000
Ped Priority 0 Max Ped Priority Freq 00
Ped Lower Sat Threshold 000 Ped Upper Sat Threshold 000
Max Ped Wait Time 000
PEDESTRIAN VARIABLE INVITATION TO CROSS
Allow Ped Invite N Ped Priority Auto 000
Ped Invite Upper Sat 000 Prio Level 1 2 3 4
Max Ped Priority Smoothed Time 000 000 000 000
Max Ped Priority Increase Length 00 00 00 00
CYCLE TIME FACILITIES
Allow Node Independence N Operator Node Independence 0
Ghost Demand Stage N Num Ghost Assessment Cycles 15
Upper Trigger Ghost 04 Lower Trigger Ghost 0
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
Stage Suffix for Offset Optimizer 1
Double Cycle Initially ? N Force Single / Double Cycling status ? N
Double Cycle Group 00 Double Cycle Ignore ? N
Allow Link Max Saturation N Link Max Sat Override N
Stages 1 2 3
Fixed N Y Y
LRT stage N N N
Skip allowed N N N
Ped stage N N N
Ped invite N N N
Ghost stage N N N
Offset authority pointer 0 Split authority pointer 0
Offset opt emiss weight 000 I/green feedback inhibit N
Bus Authority 00 ACIS node 00000
Bus Mode - Central extensions N Local extensions N Recalls N
Stage skipping N Stage truncation N Cancels N
Bus Priority Selection - Multiple buses N Queue Calculation N
Hold recall if faulty N Disable recall N Disable long jtim N Real Cancel N
Bus recall recovery type 0 Bus extension recovery type 0
Offset Bus authority pointer 0 Split Bus authority pointer 0
Bus skip recovery 0 Skip importance factor 0
Bus priority status OFF
LRT sat 1 000 LRT sat 2 000 LRT sat 3 000
PEDESTRIAN FACILITIES
Ped Node N Num Ped Wait Imp Factor 000
Ped Priority 0 Max Ped Priority Freq 00
Ped Lower Sat Threshold 000 Ped Upper Sat Threshold 000
Max Ped Wait Time 000
PEDESTRIAN VARIABLE INVITATION TO CROSS
Allow Ped Invite N Ped Priority Auto 000
Ped Invite Upper Sat 000 Prio Level 1 2 3 4
Max Ped Priority Smoothed Time 000 000 000 000
Max Ped Priority Increase Length 00 00 00 00
CYCLE TIME FACILITIES
Allow Node Independence N Operator Node Independence 0
Ghost Demand Stage N Num Ghost Assessment Cycles 15
Upper Trigger Ghost 04 Lower Trigger Ghost 0
다음 Bash 스크립트를 사용하여 첫 번째 관련 줄을 이미 추출할 수 있습니다.
grep SCN* LOG.TXT > JUNCTIONS.txt
아래와 같이 모든 연결 지점 목록이 생성됩니다.
SCN DD1251 At Glasgow Road - Kilbowie Road
SCN DD1271 At Glasgow Road - Hume Street
SCN DD1301 At Glasgow Road - Argyll Road - Cart Street
SCN DD1351 At Kilbowie Road - Chalmers Street
...
그러나 각 링크 헤더 바로 뒤에 공백이 많이 발생하기 전 노드의 마지막 링크까지 줄을 추출하고 다음 링크까지 단계 접미사부터 시작하여 아무 것도 캡처하지 않으려고 합니다.
일치하는 각 인스턴스가 발견된 후에 추가 행 수를 포함하도록 BASH 스크립트를 수정하는 방법이 있습니까?
답변1
이것이 당신이 원하는 것입니까?
sed -n '/^SCN/,/^\s*$/p' LOG.TXT
두 패턴 사이의 줄(및 이를 포함하는 줄)을 인쇄합니다.
- 줄의 시작 부분에 'SCN'이 나타납니다(
^SCN
). - 0개 이상의 공백 문자가 포함된 빈 줄(
^\s*$
)
그리고 다음을 출력합니다:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
답변2
귀하의 예에서는 awk
다음과 같은 프로그램을 생각할 수 있습니다.
awk '/^SCN/{f=1} !NF{f=0} f' LOG.TXT > JUNCTIONS.TXT
이것은 것이다
- 라인이 시작될
f
때 플래그 설정1
SCN
- 빈 줄이 발견되면 플래그를 재설정합니다
0
(이 경우 문자가 전혀 존재하지 않는 대신 텍스트 필드가 발견되지 않는다는 조건을 부과하여 "시각적으로 비어 있는" 줄을 허용합니다). - 플래그가 다음인 경우에만 현재 줄을 인쇄합니다.
1
약간 더 간단합니다. 명시적인 플래그 대신 주소 범위를 사용하세요.
awk '/^SCN/,/^[[:space:]]*$/' LOG.TXT > JUNCTIONS.TXT
예제의 출력은 다음과 같습니다.
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
첫 번째 예에서는 빈 줄을 구분하여 인쇄하지 않습니다.