awk 打印匹配行和匹配之前的行
以下是我尝试使用 awk 执行的操作。获取与正则表达式匹配的行以及紧邻匹配项之前的行并打印。我可以得到与正则表达式匹配的行,但不能得到紧接其之前的行:
awk '{if ($0!~/^CGCGGCTGCTGG/) print $0}'
Following is what I am trying to do using awk. Get the line that matches the regex and the line immediately before the matched and print. I can get the line that matched the regex but not the line immediately before that:
awk '{if ($0!~/^CGCGGCTGCTGG/) print $0}'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在这种情况下,您可以使用 grep 轻松解决它:
但是,如果您需要使用 awk:
In this case you could easily solve it with grep:
However, if you need to to use awk:
使用更直接的模式搜索
gawk '{if (/^abc$/) {print x;打印 $0};x=$0}' file1 >文件2
use more straightforward pattern search
gawk '{if (/^abc$/) {print x; print $0};x=$0}' file1 > file2
我创建了以下 awk 脚本。打印匹配行以及前两行。你可以根据这个想法让它变得更加灵活。
search.awk
用法:
I created the following awk script. Prints the matching line as well as the previous 2 lines. You can make it more flexible from this idea.
search.awk
Usage:
为什么不使用
grep -EB1 '^CGCGGCTGCTGG'
使用awk
来做同样的事情非常冗长,请参阅 Marco 的回答。Why not use
grep -EB1 '^CGCGGCTGCTGG'
The
awk
to do the same thing is very long-winded, see Marco's answer.也许有点偏离主题,但我使用贝利撒留的答案创建了我自己的上述解决方案的变体,该变体搜索Nth条目,并返回该条目和上一行。
Maybe slightly off-topic, but I used the answer from belisarius to create my own variation of the above solution, that searches for the Nth entry, and returns that and the previous line.