1

我有一个结构如下的文件:

particle 1
0.1   0.988
0.2   0.975
0.2   0.945
0.3   0.900
...
...
particle 2
0.1   0.988
0.2   0.965
0.2   0.945
0.2   0.935
0.3   0.900
...

我如何grep0.2在每个粒子下第一次出现?例如,我想要类似的grep东西

particle 1
0.2 0.975
particle 2
0.2 0.965

提前致谢!!

4

4 回答 4

6

这个 awk 单线可以帮助:

awk '/particle/{print;p=1}p&&/^0\.2/{print;p=0}' file

添加测试:

kent$  cat f
particle 1
0.1 0.988
0.2 0.975
0.2 0.945
0.3 0.900
.....
.....
particle 2
0.1 0.988
0.2 0.965
0.2 0.945
0.2 0.935
0.3 0.900

kent$  awk '/particle/{print;p=1}p&&/^0\.2/{print;p=0}' f
particle 1
0.2 0.975
particle 2
0.2 0.965
于 2013-09-24T20:14:50.447 回答
0

假设您只想在粒子 id 下面有 0.2 并且样本输入中的粒子 id 是占位符但在真实文件中以非数字开头时打印粒子 id:

$ cat file
particle 1
0.1   0.988
0.2   0.975
0.2   0.945
0.3   0.900
...
particle 2
0.1   0.988
0.3   0.900
0.4   0.900
...
particle 3
0.1   0.988
0.2   0.965
0.2   0.945
0.2   0.935
0.3   0.900
...

$ awk '/^[^[:digit:]]/{p=$0} p && ($1==0.2){ print p ORS $0; p="" }' file
particle 1
0.2   0.975
particle 3
0.2   0.965
于 2013-09-25T13:35:21.590 回答
0

这可能对您有用(GNU sed):

sed -r '/particle/b;/^0\.2/!d;:a;$!N;/^(0\.2\s).*\n\1/s/\n.*//;ta;P;D' file

如果该行包含particle打印它。如果该行没有开始0.2删除它。如果第二行开始,则删除第二行,0.2否则打印第一行。

于 2013-09-25T06:27:32.160 回答
0

grep 怎么样

grep -E '^partice|^.2' f
于 2013-09-24T22:45:04.747 回答