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

时间:2015-03-04 19:10:34

标签: awk sed bioinformatics

我的文件结构如下:

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

这将返回整个文件中的行数。关于下一步在哪里看的任何提示?这似乎不是最常见的任务,我也找不到其他许多建议。

1 个答案:

答案 0 :(得分:2)

awk应该:

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

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


这可能更好:

awk -v RS= -F"\n" '{print $1":",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 ","",$1);print $1":",NF-1}' file
A and B: 3
A and C: 2
B and C: 4