使用 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'
我有一个格式如下的文件
/////
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'