awk中或削减一个唯一的列和另一列的数量如何输出值

问题描述:

现在我有awk中或削减一个唯一的列和另一列的数量如何输出值

grep "\sinstalled" combined_dpkg.log | awk -F ' ' '{print $5}' | sort | uniq -c | sort -rn 
grep "\sinstalled" combined_dpkg.log | sort -k1 | awk '!a[$5]++' | cut -d " " -f1,5,6 

,并希望两成一个查询包含的$ 5与-f1计数相结合, 5,6。 如果有这样的方法,或者保留最后一个管道输出值的方法。

高于第一bash命令的头-3结果:

11 man-db:amd64 
10 libc-bin:amd64 
    9 mime-support:all 

而第二bash命令的:

2015-11-10 linux-headers-4.2.0-18-generic:amd64 4.2.0-18.22 
2015-11-10 linux-headers-4.2.0-18:all 4.2.0-18.22 
2015-11-10 linux-signed-image-4.2.0-18-generic:amd64 4.2.0-18.22 

文件格式看起来像:

2015-11-05 13:23:53 upgrade firefox:amd64 41.0.2+build2-0ubuntu1 42.0+build2-0ubuntu0.15.10.1 
2015-11-05 13:23:53 status half-configured firefox:amd64 41.0.2+build2-0ubuntu1 
2015-11-05 13:23:53 status unpacked firefox:amd64 41.0.2+build2-0ubuntu1 
2015-11-05 13:23:53 status half-installed firefox:amd64 41.0.2+build2-0ubuntu1 
+3

请注明您的样品输入和预期的输出码标签, sp,我们可以帮助你,谢谢。 – RavinderSingh13

grep "\sinstalled" combined_dpkg.log | sort -k1 | awk '!a[$5]' | cut -d " " -f1,5,6 | uniq -c 
+0

“对于每个软件包,找到最早安装的(第一个)版本。打印软件包名称,版本和安装的总次数。“我需要将uniq应用于仅一列,但不知道如何操作 – R678

根据你的评论:“对于每个包,请查找最早安装的(第一个)版本。打印软件包的名称,版本和它被安装的总次数。”

我想这AWK会做。

awk '$0!~/ installed/{next} !($5 in a){a[$5]=$1 FS $5 FS $6; count[$5]++; next} count[$5]>0 && a[$5]~$6{count[$5]++} END{for (i in a) print a[i],count[i]}' file