在我的 Linux 终端中,我需要找到此类事件的数量,其中pattern 1
和pattern 2
出现在两行中,而这两行恰好n
相隔几行,而附加要求pattern 3
不能出现在这些n
行中的任何一行中。例如,如果我有一个文本文件
...
a
* pat1 **
b
c
** pat2 ****
* pat1 **
b
** pat2 ****
*******pat1**
efda
*pat3****
**pat2********
...
当n=2
and pattern 1
is pat1
, pattern 2
is pat2
, and pattern 3
ispat3
时,那么只有 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
是相同的。- 这三种模式都是一样的。
- 其中没有两个是相同的。