如何计算一行中除特定字符之外的字符数?

如何计算一行中除特定字符之外的字符数?

这是部分文件

N W N N N N N N N N N
N C N N N N N N N N N
N A N N N N N N N N N
N N N N N N N N N N N
N G N N N N N N N N N
N C N N N C N N N N N
N C C N N N N N N N N

在每一行中,我想计算所有非“N”字符的总数

我的愿望输出

1
1
1
0
1
2
2

答案1

GNUawk解决方案:

awk -v FPAT='[^N[:space:]]' '{ print NF }' file
  • FPAT='[^N[:space:]]'- 定义字段值的模式(除N字符和空格之外的任何字符)

预期输出:

1
1
1
0
1
2
2

答案2

awk '{ gsub("[ N]",""); print length() }'

答案3

另一种awk方法(将返回-1对于空行)。

awk -F'[^N ]' '$0=NF-1""' infile

或者在复杂的情况下,它会返回-1在空行上,0仅在空白(制表符/空格)行上。

awk -F'[^N \t]+' '$0=NF-1""' infile

答案4

选择awk解决方案:

awk '{ print gsub(/[^N[:space:]]/,"") }' file
  • gsub(...)- 该gsub()函数返回进行替换的次数。

输出:

1
1
1
0
1
2
2

相关内容