我的文件结构如下:
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
这将返回整个文件中的行数。关于下一步在哪里看的任何提示?这似乎不是最常见的任务,我也找不到其他许多建议。
答案 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