我有一个目录,里面全是纯文本文件,第一行有标签,我想获取标签及其频率的列表。我提取了标签并将它们排序成一个大列表;假设它看起来像这样:
apple
banana
banana
banana
banana
orange
orange
kumquat
pomegranate
pineapple
pineapple
pineapple
然后我通过管道uniq -c
将其转换成带有计数的列表:
1 apple
4 banana
2 orange
1 kumquat
1 pomegranate
3 pineapple
我现在想对其进行排序,首先按数字倒序排列(数字最大),然后按前锋字母顺序。我尝试通过管道传输sort -bnr
(忽略前导空格、数字排序、反向顺序)来实现这一点,但这-r
也适用于字母部分:
4 banana
3 pineapple
2 orange
1 pomegranate
1 kumquat
1 apple
我考虑过-k
按多个字段排序的选项,这是我前几天才知道的,但看起来不能对不同的-k
选项分别应用反转(也许它只是让输出通过tac
或诸如此类?)。将其通过第二个管道sort
不起作用,因为它会忽略之前的排序并再次混淆数字部分。
理想情况下,解决方案仍将使用sort
和uniq
,但如果有必要,我愿意切换到其他工具。不过,这可能最终会以脚本的形式出现,因此需要交互式工具的解决方案已经过时。
答案1
哎呀,我已经找到答案了,因为我开始随机浏览“相关”侧边栏中的项目!事实证明,您可以在字段说明符后使用参数来将它们仅应用于该字段 - 我阅读了手册页的这一部分,但显然没有仔细阅读,因为我错过了:
OPTS 是一个或多个单字母排序选项 [bdfgiMhnRrV],用于覆盖该键的全局排序选项。如果没有指定键,则使用整行作为键。
最终命令:
sort -bk 1rn -k 2