문자열과 일치하는 모든 줄과 해당 문자열 뒤의 지정된 줄 수를 인쇄합니다.

문자열과 일치하는 모든 줄과 해당 문자열 뒤의 지정된 줄 수를 인쇄합니다.

로그 파일에서 교통 허브 및 연결에 대한 데이터를 추출하고 싶습니다. 로그 예:

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때 플래그 설정1SCN
  • 빈 줄이 발견되면 플래그를 재설정합니다 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                                

첫 번째 예에서는 빈 줄을 구분하여 인쇄하지 않습니다.

관련 정보