2017-09-06 4 views
0

둘러 보았지만 이에 대한 답을 찾을 수 없습니다.쉘을 사용하여 다른 일치가 발생한 후 일치하는 행 추출

나는이 양식의 일부 CSV 파일이 :

* COMMENT 
* Another comment 
100 ; 2029 ; 0.18 ; 0.45 ; 0.00015 ; 0.1485 ; 0.03 ; 1 ; 1 ; 2 ; 344 ; 100 ; 100 ; 

* Comment 
* Comment 

* ZT vector 
0; 742; p; nan 
1; 367; p; nan 
2; 125; p; nan 
3; 1; d; nan 

* KS vector 
0; 125; p; 33.3773 
1; 742; p; 290.274 
2; 1; d; 290.274 
3; 367; p; 340.774 



*Total time: 3.98785 

내가 줄 * KS vector 후 패턴 d; 만 하나 포함 된 행을 추출하고 싶습니다.

2; 1; d; 290.274 

이 마음에 안 :

그래서이 경우에는이 같은 출력이 원하는 모든 CSV 파일에서

3; 1; d; nan 
2; 1; d; 290.274 

* KS vector 한 후 d;를 포함하는 하나 개의 라인이 될 것 * ZT vector* KS vector 사이

쉘을 사용하여 어떻게 수행 할 수 있습니까?

답변

1

사용 AWK :

$ awk '/KS vector/{f=1} f==1&&/d/' file 
2; 1; d; 290.274 

는 설명 :

awk '     
/KS vector/ { f=1 } # after this record flag up 
f==1 && /d/   # if flag is up and we see d, output 
' file