按出现次数对行排序
Order lines by number of occurrences
给定一个每行一个元素的列表(偶尔有一些空行),例如:
22008
6881
6881
22008
6881
22008
22008
6881
56515
8080
8080
56515
22008
45682
45682
22008
我想得到一个列表作为输出,其中包含按出现次数排序的唯一项目:
22008 - 6
6881 - 4
8080 - 2
45682 - 2
56515 - 2
谢谢!
按出现次数排序的数字:
$ grep -vE '^$' file | sort | uniq -c | sort -rn
6 22008
4 6881
2 8080
2 56515
2 45682
工作原理
grep -vE '^$' file
从文件中删除空行
sort | uniq -c
对数字进行排序,然后打印唯一的数字及其出现次数。
sort -rn
按出现次数降序排列。
uniq
命令有一个选项 -c
来发出它找到的连续出现的次数。解决方案是首先删除空行和 sort
输入到 uniq -c
的列表,然后 sort
第一个字段的输出,其中包含出现次数。
sed '/^\s*$/d' | sort | uniq -c | sort -k1nr
的输出是
6 22008
4 6881
2 45682
2 56515
2 8080
请注意最后 sort
的选项:-k1nr
表示在第一个字段上按数字倒序(即降序)排序。
您可以使用 awk
和 sort
。 cnt 使用您在第 1 列 </code> 中的数字作为索引。将 <code>++
1 添加到每一行的数组索引 $1 的值。管道 (|
) 到 sort
。 sort
第 2 列 (-k2
) 反向 (-r
)
awk '/[0-9]/ {cnt[]++}END{for(k in cnt) print k,"- " cnt[k]}' file.txt |sort -rk2
如果您删除 /[0-9]/
,您还将获得空行数作为奖励:)。
如果你愿意,可以用/^[0-9]+/
做全匹配;但是,因为我们使用 [=22=]
进行计数,所以这里并不重要。
给定一个每行一个元素的列表(偶尔有一些空行),例如:
22008
6881
6881
22008
6881
22008
22008
6881
56515
8080
8080
56515
22008
45682
45682
22008
我想得到一个列表作为输出,其中包含按出现次数排序的唯一项目:
22008 - 6
6881 - 4
8080 - 2
45682 - 2
56515 - 2
谢谢!
按出现次数排序的数字:
$ grep -vE '^$' file | sort | uniq -c | sort -rn
6 22008
4 6881
2 8080
2 56515
2 45682
工作原理
grep -vE '^$' file
从文件中删除空行
sort | uniq -c
对数字进行排序,然后打印唯一的数字及其出现次数。
sort -rn
按出现次数降序排列。
uniq
命令有一个选项 -c
来发出它找到的连续出现的次数。解决方案是首先删除空行和 sort
输入到 uniq -c
的列表,然后 sort
第一个字段的输出,其中包含出现次数。
sed '/^\s*$/d' | sort | uniq -c | sort -k1nr
的输出是
6 22008
4 6881
2 45682
2 56515
2 8080
请注意最后 sort
的选项:-k1nr
表示在第一个字段上按数字倒序(即降序)排序。
您可以使用 awk
和 sort
。 cnt 使用您在第 1 列 </code> 中的数字作为索引。将 <code>++
1 添加到每一行的数组索引 $1 的值。管道 (|
) 到 sort
。 sort
第 2 列 (-k2
) 反向 (-r
)
awk '/[0-9]/ {cnt[]++}END{for(k in cnt) print k,"- " cnt[k]}' file.txt |sort -rk2
如果您删除 /[0-9]/
,您还将获得空行数作为奖励:)。
如果你愿意,可以用/^[0-9]+/
做全匹配;但是,因为我们使用 [=22=]
进行计数,所以这里并不重要。