提取匹配线在另一场比赛使用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

我想提取包含模式 d;的行,但只有一行 * KS vector

所以在这种情况下,我想要这样的输出:

2; 1; d; 290.274

不喜欢这样:

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

在每个CSV文件中,* KS vector之后只有一行包含d;,而* ZT vector* KS vector之间只有一行。

我该如何使用外壳?

使用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               

最新更新