我的文件结构如下:
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 :(得分:6)
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
答案 1 :(得分:0)
grep怎么样
grep -E '^partice|^.2' f
答案 2 :(得分: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
,否则打印第一行。
答案 3 :(得分:0)
假设您只想在下面有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