列中的 Uniq 降序排序

列中的 Uniq 降序排序

在给定的数据中,是否可以对每个区域进行 uniq 排序并仅打印最热门的命中?

给定数据

aza1 18
bcn1 16
sat2 12
lcy2 12
fra1 12
aza1 12
bcn1 10
sat2 8
lcy2 9
fra1 13
aza1 21
bcn1 2
sat2 10
lcy2 0
fra1 1

所需输出

aza1 21
bcn1 16
sat2 12
lcy2 12
fra1 13

答案1

如果顺序很重要,则解决方案仅使用种类独特的

<INPUT_FILE sort -k 1,1 -k 2nr,2 | uniq -w4

输出:

aza1 21
bcn1 16
fra1 13
lcy2 12
sat2 12

排序参数:

-k:按键排序(在本例中为列,与 -t 配对)

-n:按数字排序

-r:相反的顺序

(可选)-t:如果您想更改键分隔符(默认值:空格)

唯一参数:

-w:选择前N个字符

解释:

在您的问题中,我们需要首先对第一列进行排序,然后对第二列进行排序。所以有一个-k 1,1其次是-k 2,2。但是,第二把钥匙(仅有的)必须按数字按相反顺序排序。因此,应该是-k 2nr,2

请注意,如果 -n 或 -r 排序参数位于 -k 参数之外,则它们将应用于整个输入而不是特定键。

最后,我必须找到唯一的行,但仅匹配前 4 个字符。因此,优衣库-w 4

答案2

如果顺序无关紧要:

<infile sort -rnk2,2  |sort -uk1,1

-r在第 ey 列编号( )上-n使用数字,然后在第一个ey 列 ( )上保留并标记行;sort-k2sort -rnk2,2-u-ksort -uk1,1

或与以下相同awk

<infile awk '
            { arr[$1]= (arr[$1]<$2)? $2 : arr[$1] }
         END{ for (x in arr) print x, arr[x] }'

相关内容