awk或剪切如何输出一个唯一列和其他列值的计数

时间:2017-10-28 17:37:01

标签: linux bash

现在我有

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

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

上面第一个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

2 个答案:

答案 0 :(得分:0)

-m pip install -U pip setuptools

答案 1 :(得分:0)

根据您的评论:"对于每个软件包,找到已安装的最早(第一个)版本。打印包装名称,版本和安装的总次数。"

我猜这个 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