Maran Ganesh Asked: 2019-04-18 09:33:08 +0800 CST2019-04-18 09:33:08 +0800 CST 2019-04-18 09:33:08 +0800 CST 列中的唯一降序排序 772 在给定的数据中,是否可以对每个区域进行 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 sort uniq 2 个回答 Voted Best Answer brunosktx 2019-04-18T10:21:32+08:002019-04-18T10:21:32+08:00 如果顺序很重要的解决方案,仅使用sort和uniq <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 个字符。因此,uniq -w 4 αғsнιη 2019-04-18T10:22:03+08:002019-04-18T10:22:03+08:00 如果顺序无关紧要: <infile sort -rnk2,2 |sort -uk1,1 -revers -numericalsort在-key 列号2( ) 上,然后在第一个ey 列 ( ) 上sort -rnk2,2保留和-unique 行;-ksort -uk1,1 或与awk: <infile awk ' { arr[$1]= (arr[$1]<$2)? $2 : arr[$1] } END{ for (x in arr) print x, arr[x] }'
如果顺序很重要的解决方案,仅使用sort和uniq
输出:
排序参数:
-k:按键排序(在本例中为列,与 -t 配对)
-n:按数字排序
-r:倒序
(可选)-t:如果您想更改键分隔符(默认:空格)
唯一参数:
-w:选择前N个字符
解释:
在您的问题中,我们需要先对第一列进行排序,然后再对第二列进行排序。所以有一个-k 1,1后跟-k 2,2。但是,第二个键(仅)必须按数字排序,并且顺序相反。因此,它应该是-k 2nr,2。
请注意,如果 -n 或 -r 排序参数在 -k 参数之外,它们将应用于整个输入而不是特定键。
最后,我必须找到唯一的行,但只匹配前 4 个字符。因此,uniq -w 4
如果顺序无关紧要:
-r
evers-n
umericalsort
在-k
ey 列号2
( ) 上,然后在第一个ey 列 ( ) 上sort -rnk2,2
保留和-u
nique 行;-k
sort -uk1,1
或与
awk
: