计算一行中逗号分隔的字符

计算一行中逗号分隔的字符

如何使用 awk 或 sed 计算文件的给定列(制表符分隔)中有多少个用逗号分隔的元素?

示例:

AC    1,23,5
DC    2,8,89

将返回:

AC    3
DC    3

答案1

$ awk -F '[\t,]' '{print $1, NF-1}' some_file

在哪里

  • -F设置字段分隔符,即制表符或逗号
  • $1引用第一个字段
  • NF是一个内置变量,包含记录中的字段数
  • awk 语句针对每条记录(即每行)执行

答案2

awk -v col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}'

col是表示分析的列号的参数,并-v为其分配 2。

-F '\t'将字段分隔符设置为制表符1gsub返回替换的数量,因此它用于计算逗号的数量。结果分配给分析列,最终print显示所有列。

$ cat input 
AC  1,23,5
DC  2,8,89
XX  3,4,5,6,7   YYY,ZZZ
$ awk --assign col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}' < input
AC 3
DC 3
XX 5 YYY,ZZZ

1某些 awk 实现可能无法解析\t,在这种情况下,您可以使用一些 Bash 特定的引用- $'\t'- 它将把制表符本身传递给 awk。

相关内容