在给定的数据中,是否可以对每个区域进行 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
Run Code Online (Sandbox Code Playgroud)
所需输出
aza1 21
bcn1 16
sat2 12
lcy2 12
fra1 13
Run Code Online (Sandbox Code Playgroud)
小智 5
如果顺序很重要,则仅使用sort和uniq的解决方案
<INPUT_FILE sort -k 1,1 -k 2nr,2 | uniq -w4
Run Code Online (Sandbox Code Playgroud)
输出:
aza1 21
bcn1 16
fra1 13
lcy2 12
sat2 12
Run Code Online (Sandbox Code Playgroud)
排序参数:
-k:按键排序(在本例中为列,与 -t 配对)
-n:按数字排序
-r:相反的顺序
(可选)-t:如果您想更改键分隔符(默认值:空格)
唯一参数:
-w:选择前N个字符
解释:
在您的问题中,我们需要首先对第一列进行排序,然后对第二列进行排序。所以有-k 1,1后跟-k 2,2。但是,第二个键(仅)必须按数字并按相反顺序排序。因此,它应该是-k 2nr,2。
请注意,如果 -n 或 -r 排序参数位于 -k 参数之外,则它们将应用于整个输入而不是特定键。
最后,我必须找到唯一的行,但仅匹配前 4 个字符。因此,uniq -w 4