我环顾四周,但我无法找到答案。
我有一些这种形式的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文件中,d;
之后只有一行包含* KS vector
,* ZT vector
和* KS vector
之间只有一行。
如何使用shell执行此操作?
答案 0 :(得分: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