如何计算一行中模式的出现

Sai*_*sha 8 text-processing

我有一个包含三列的文件。第 3 列包含基因名称,如下所示:

Rv0729,Rv0993,Rv1408  
Rv0162c,Rv0761c,Rv1862,Rv3086  
Rv2790c
Run Code Online (Sandbox Code Playgroud)

如何打印每行中的基因数量?

Kus*_*nda 10

您只想添加一列,其中包含列数。这可以使用awk

$ awk -F ',' '{ printf("%d,%s\n", NF, $0) }' data.in
3,Rv0729,Rv0993,Rv1408
4,Rv0162c,Rv0761c,Rv1862,Rv3086
1,Rv2790c
Run Code Online (Sandbox Code Playgroud)

NF是一个awk变量,包含当前记录(行)中的字段(列)数。我们为每一行打印这个数字,后跟一个逗号和行的其余部分。

另一种选择(相同的结果,但可能看起来更简洁):

$ awk -F ',' 'BEGIN { OFS=FS } { print NF, $0 }' data.in
Run Code Online (Sandbox Code Playgroud)

FSawk用于将每个记录拆分为字段的字段分隔符,我们-F ','在命令行上将其设置为逗号(如第一个解决方案)。OFS输出字段分隔符,我们将其设置为与FS读取第一行输入之前相同。


Sté*_*las 5

如果您想计算Rv[0-9]{4}c?模式的出现次数,而不是问题主题所建议的逗号分隔字段的数量,您可以这样做:

 awk '{print gsub(/Rv[0-9]{4}c?/, "&"), $0}'
Run Code Online (Sandbox Code Playgroud)