问题
的输出grep -A 4 davidson file.txt
给了我:
davidson 0 27 |r|= 0.00244 e= [-0.04073962 0.42777949 0.44157777 0.45997235 0.45997235 0.51613738
0.55005554 0.5538866 0.5538866 0.57108874 0.63182267 0.68741162
0.68741186 0.69608 0.78013465 0.78013465 0.78042162 0.78688599
0.78688599 0.79381315 0.79381317 0.80049466 0.80049466 0.92062423
0.93453524 1.01356402 1.01942272] max|de|= 1.02 lindep= 0.809
--
davidson 1 54 |r|= 3.26 e= [-0.04073964 0.42777928 0.44157749 0.45997213 0.45997213 0.51613724
0.55005542 0.55388652 0.55388652 0.57108822 0.63182247 0.68741026
0.68741031 0.69607963 0.78013252 0.78013252 0.78042159 0.78688546
0.78688546 0.793812 0.793812 0.80049354 0.80049354 0.92062408
0.93453361 0.97904591 1.01356325 1.01945088] max|de|= -0.0404 lindep= 0.694
--
davidson 2 66 |r|= 0.523 e= [-0.04073964 0.02576398 0.42777928 0.44157749 0.45997212 0.45997212
0.51613724 0.55005542 0.55388652 0.55388652 0.57108822 0.63182247
0.68741006 0.68741006 0.69607962 0.78013218 0.78013218 0.78042159
0.78688546 0.78688546 0.79381179 0.79381179 0.80049292 0.80049292
0.92062408 0.93453351 1.01356275 1.01942294] max|de|= -0.953 lindep= 0.278
如果对于上述三组输出中的每一组,我只想要第一行和最后一行怎么办?davidson
具体来说,我只想获取第 1 行和第 5 行,而不是获取字符串的每个实例的第 1-5 行。
我之前尝试过的研究
我搜索过:
“grep -A”但删除了一些行
使用 Google 和 unix.se 中的搜索栏,并没有得到很多结果(尤其是后面的搜索,它只给了我这)。以下是我从 Google 搜索中找到的一些结果,以及它们似乎无法解决我的问题的原因:
- Unix.SE:grep 具有模式 A 的文件,但排除具有模式 B 的文件(我实际上不知道要排除什么模式,因为每次都不同)。
- 堆栈溢出:grep 忽略多行(对于问题中提供的具体数据,答案非常“硬编码”,并且不包含解释)。
- 堆栈溢出:将 grep 的 -v 选项与 -A 选项结合起来(对于问题中提供的具体数据,答案非常“硬编码”)。
- 堆栈溢出:匹配模式后提取第 N 行(这很相似,但与我要问的不同)。
- 堆栈溢出:Grep 中的跳行(这越来越接近,但也不完全是我要问的)。
当输入这个问题时,向我建议了以下问题:
- Unix.SE:grep 文档中列出的“group-separator”选项在哪里?,它指的是:
- 堆栈溢出:在使用 grep 和上下文行时如何去掉“--”行分隔符?
但这些都不能解决我的问题。
答案1
不幸的是,您没有向我们提供原始数据的样本,但是使用上面的输出可能会达到您想要的效果?
而不是grep -A4 ...
尝试这个:
awk '/davidson/{h=NR;line=$0} NR==h+4{print line;print $0}' file.txt