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
答
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
请注明您的样品输入和预期的输出码标签, sp,我们可以帮助你,谢谢。 – RavinderSingh13