我花了一些时间在网上搜索,但没有找到答案。
假设我有一个包含以下几行的文件:
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
关于awk - 如何获取包含某个字符串的行和包含另一个字符串的另一行之间的所有行加上之前的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67077458/