awk - 如何使用 awk 打印存储在数组中的值的计数?

标签 awk

我有这个示例文件 -

$cat f
a a1
a a2
a a3
b b1
b b2
b b3
b b4
c c1
c c2
c c3

并排打印我在下面使用的公共(public)栏的记录 -

$awk '{a[$1]=a[$1]OFS$2} END {for (k in a) print k ,a[k]}' f
a  a1 a2 a3
b  b1 b2 b3 b4
c  c1 c2 c3

如何在单个命令中实现以下输出,其中最后一列是公共(public)列的记录数。

a  a1 a2 a3 3 
b  b1 b2 b3 b4 4 
c  c1 c2 c3 3

我们可以结合两个命令来实现这个 -

$awk '{a[$1]=a[$1]OFS$2} END {for (k in a) print k ,a[k]}' f|awk '{print $0, NF-1}'
a  a1 a2 a3 3
b  b1 b2 b3 b4 4
c  c1 c2 c3 3

最佳答案

一种方法是使用 gsub 的返回值 - 它返回所做的替换数

$ awk '{a[$1]=a[$1]OFS$2}
       END {for (k in a) print k a[k], gsub(OFS, OFS, a[k])}' ip.txt 
a a1 a2 a3 3
b b1 b2 b3 b4 4
c c1 c2 c3 3

注意:我还删除了 k a[k] 之间的 , - 否则第一列和第二列之间会有两个空格

关于awk - 如何使用 awk 打印存储在数组中的值的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292840/

相关文章:

awk - 如何在使用 AWK 在结果空字段上打印给定值的同时合并两个文件?

regex - 我如何从一个点 grep 到另一个点,同时忽略第一个匹配项?

bash - 将 Bash Shell 变量传递给 Awk NR 函数

macos - Mac OS X 上的 Awk strftime

if-statement - 如何根据条件使连续行进入列?

linux - awk 跳过空行

html - 如何使用 vim 和插件快速为所有行添加 html 属性和值?

bash - 遍历子目录并对某些文件执行 awk 脚本

AWK 脚本输出不正确 - 列中有重复项

bash - 在变量中搜索实例 ID 的所有出现