awk - 如何获取包含某个字符串的行和包含另一个字符串的另一行之间的所有行加上之前的行
问题描述
我花了一些时间在网上搜索,但没有找到答案。假设我有一个包含以下行的文件:
aaaaaaa
vvvvv
ggggg
yyyyyyyyy
ffffff
rrrrrrrr
uuuuu
ssssssssssss
zzzzz
hhhhhhhh
我知道如何使用 awk 查找从包含“ffffff”的行到包含“uuuuu”的所有行:
awk '/ffffff/,/uuuuu/' file
但是我怎样才能得到我发现的第一个行之前的行(即“yyyyyyyyy”)?有没有像 grep -B 1 这样的东西来做到这一点?我想要得到的是:
yyyyyyyyy
ffffff
rrrrrrrr
uuuuu
提前致谢。
解决方案
仅在输入中同时存在 ffffff 和 uuuuu 时打印,如果 ffffff 是输入中的第一行,则不打印空行:
$ cat tst.awk
/ffffff/ { f = 1 }
f {
rec = rec $0 ORS
if ( /uuuuu/ ) {
printf "%s", rec
f = 0
}
next
}
{ rec = $0 ORS }
$ awk -f tst.awk file
yyyyyyyyy
ffffff
rrrrrrrr
uuuuu
推荐阅读
- docker - 无法从远程机器访问 Docker 容器
- python - 跟踪 Python 脚本中的每一步
- php - 如何在聊天中安排味精,或者像whatsapp使用php,ajax
- xamarin - Xamarin Forms Maps 自定义 Pin 看起来像自己的位置
- python - 如何确定我在 Python 中给定目录树的最后一个文件夹中?
- java - 使用递归的二进制搜索仅采用参数中的搜索值
- function - 如何修复这个批处理 unix 时间随机数生成器?
- c# - 如何生成带有捕获变量的嵌套 lambda 表达式
- cordova - 科尔多瓦套接字编程以通信两个android设备
- c# - 捕获事务错误