如何解决我如何使用awk grep最后一组行?
Start
1
2
3
5
end
Start
a
b
c
d
end
我如何仅使用awk来获取从“开始”到“结束”的结尾部分,如下所示?
Start
a
b
c
d
end
尝试过的努力:
awk '/Start/ {{ f = 1;n++ }} f && n == 2; /end/ {{ f = 0 }}' file.txt
解决方法
您可以使用此awk
:
awk '$1 == "Start" { s = ""; p = 1 }
p { s = s $0 ORS }
$1 == "end" { p = 0 }
END { printf "%s",s }' file
Start
a
b
c
d
end
,
使用tac
+ awk
解决方案,请您试一试。
tac Input_file | awk '/^end/{found=1} found; /^Start/{exit}' | tac
说明: tac
将以相反的顺序(从下到上的方式)打印Input_file,然后将其输出传递到awk
命令并在awk
代码打印中,从第一次出现end
到第一次出现start
。找到第一个awk
时从start
代码退出,此输出再次发送到tac
,它将反转输出并将其以Input_file的原始形式发布。
第二个解决方案: 使用GNU awk
可以尝试,但它假定没有差异(表示每次开始后在其中存在end关键字) OP的Input_file,否则将在开始和结束关键字的外观中给出错误的肯定结果。
awk -v RS= '{sub(/.*Start/,"Start")} 1' Input_file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。