我有这个示例文件 -
$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/