使用 shell 命令进行多级解析

Multilevel parsing using shell command

我有一个格式如下的文件

/////
name 1
start_occurrence:
occurrence 1
occurrence 2

///
name 2
start_occurance:
occurrence 1
occurrence 2

///
name 3
start_occurrence:
occurrence 1
occurrence 2
occurrence 3

我只需要计算每个名称出现的次数并将它们保存在 CSV 文件中。我可以使用 shell 命令的任意组合吗?是的,我可以通过编程方式完成,但要以管道方式寻找一堆 shell 命令。

"names" 可以是任何东西。名称没有模式。唯一要注意的是 /// 之后的行是名称。 Occurrence 也没有任何数字,任何以 occurrence 开头或具有 occurrence 的行都是感兴趣的主题。

awk 'c=="THISISNAME"{b=[=10=];c="";}=="///"{c="THISISNAME"}[=10=]~/\<occurrence\>/{a[b]+=1;}END{for (i in a){print i" "a[i]}}'  YOUR_FILE_HERE

解释:

if match the name start condition (=="///"), mark the c to THISISNAME.

if this is the name line (c=="THISISNAME"), mark the name line with b, and mark c as name part ended(c="").

if match the occurrence condition ([=11=]~/\<occurrence\>/), make a[b] += 1.

use a map a to remark the occurrence time of each name.

awk 使用 ERE,$0~/EREs/ 表示 $0 匹配正则表达式。 '\<' 和 '>' 在 PREs

中表示 '\b'