2013-09-24 33 views
1

我的影片构成的文件,如下所示:如何选择grep?

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 
... 

我如何grep只有0.2每个粒子下的第一次出现?例如我想grep

particle 1 
0.2 0.975 
particle 2 
0.2 0.965 

在此先感谢!

+0

@ RahulTripathi'-m 1'只会让grep匹配一次..我不认为你的grep行会执行OP想要的操作。 – Kent

+0

@Kent: - 明白了!感谢您纠正我! –

回答

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 
0

怎么样的grep

grep -E '^partice|^.2' f 
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否则打印第一行。

0

假设你只想打印粒子ID时,有其下一个0.2,并且在你的样品输入粒子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