在我的 Linux 终端中,我需要找到此类事件的数量,其中pattern 1和pattern 2出现在两行中,而这两行恰好n相隔几行,而附加要求pattern 3不能出现在这些n行中的任何一行中。例如,如果我有一个文本文件
...
a
* pat1 **
b
c
** pat2 ****
* pat1 **
b
** pat2 ****
*******pat1**
efda
*pat3****
**pat2********
...
当n=2and pattern 1is pat1, pattern 2is pat2, and pattern 3ispat3时,那么只有 1 次出现。
如何在awk, grep(或其姐妹)等实用工具中方便地做到这一点。我知道如何使用 python 或 perl 来做到这一点,但只是想知道这些实用工具是否可以做到这一点。
谢谢你。
这是我在阅读@Barmar 的回答后所尝试的
awk -v n=2 '/pat1/ { first = NR }
!/pat3/
/pat2/ && first && NR - first == n { count++ } END {print count}'
但我仍然没有正确理解它。我需要针对四种情况执行此操作:
pat1并且pat3是相同的。pat2并且pat3是相同的。- 这三种模式都是一样的。
- 其中没有两个是相同的。