【发布时间】:2019-07-01 12:24:27
【问题描述】:
假设一个多行文本文件file,其中一些行以关键字baz 开头。
$ cat file
foo bar
baz qux # line to be deleted
foo bar
foo bar baz
baz
baz qux quux
foo bar
如何显示所有不以关键字开头的行以及n 以关键字开头的最后一行?
如果 n=2,结果应如下所示:
$ sought_command file
foo bar
foo bar
foo bar baz
baz
baz qux quux
foo bar
我相信 awk 可能是这里的方法。大致如下:
counter=1
tac file | awk '{
if ($1 =="baz" && counter<=2)
{print $0; counter=$((counter+1));}
else if ($1 =="baz" && counter>2)
{next;}
else
{print $0;}
}' | tac
我需要在上面的代码中进行哪些更改才能使其正常工作?
【问题讨论】:
-
这个逻辑是如何工作的?最后几行仍然以
baz开头?有没有可能你指的是一半和另一半 -
Awk 不知道有一个 Bash 变量也名为
counter。 -
@Inian 输出应该正好包含以关键字开头的两行,即输入的最后两行 baz 起始行。