2017-09-06 14 views
0

我環顧四周,但我無法爲此找到答案。使用shell在發生另一場比賽之後提取匹配線

我有一些的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 

不喜歡這樣的:

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

在每一個CSV文件中,有將是* KS vector和一個後含d;只有一條線在* ZT vector* KS vector之間。

如何使用shell來做到這一點?

回答

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