我环顾四周,但我找不到答案。
我有一些以此形式的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