如何使用 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'
将字段分隔符设置为制表符1。gsub
返回替换的数量,因此它用于计算逗号的数量。结果分配给分析列,最终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。