计算数据文件中模式匹配之间的出现次数并生成报告

Counting occurrences between pattern matches in data file and generating a report

我的文件结构如下:

MATCH A and B
001
005
101

MATCH A and C
020
400

MATCH B and C
001
156
807
920

我想生成如下所示的报告:

A and B: 3
A and C: 2
B and C: 4

我想使用的工具是 sed/awk。我知道 sed 可以打印模式匹配之间的行,但以下最终会打印出整个文件。

sed -n '/^MATCH/,/^MATCH/p' file.txt | wc -l

这returns整个文件的行数。关于接下来要看哪里的任何提示?这似乎不是最常见的任务,我也找不到很多其他建议。

这个awk应该做的:

awk -v RS= '{print ,,":",NF-4}' file
A and B: 3
A and C: 2
B and C: 4

由于记录之间由一个空行分隔,并且RS设置为空,
我们只需要计算字段 NF 减去第一行。


这可能更好:

awk -v RS= -F"\n" '{print ":",NF-1}' file
MATCH A and B: 3
MATCH A and C: 2
MATCH B and C: 4

或删除MATCH字:

awk -v RS= -F"\n" '{sub("MATCH ","",);print ":",NF-1}' file
A and B: 3
A and C: 2
B and C: 4