计算数据文件中模式匹配之间的出现次数并生成报告
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
我的文件结构如下:
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