ZakS Asked: 2019-07-16 06:03:55 +0800 CST2019-07-16 06:03:55 +0800 CST 2019-07-16 06:03:55 +0800 CST 如何计算列表中的出现次数,然后按出现次数降序排序? 772 我有一个包含 1601 行的列表,在每一行上,我有兴趣计算字段 5 出现不同值的次数。 这是我到目前为止所拥有的: awk '{print$5}' FILE | sort | uniq -c 这给了我一个 uniq 值列表,以及它们各自的计数。但我想对这个列表进行排序。我一直在看到讨论键和值的答案,但尚不清楚如何将其应用于我的案例。 感谢您提前提供任何帮助。 sort uniq 2 个回答 Voted Best Answer Kusalananda 2019-07-17T02:01:26+08:002019-07-17T02:01:26+08:00 您只是sort -b -n在管道末尾缺少 a (作为它的另一个阶段): awk '{ print $5 }' FILE | sort | uniq -c | sort -b -n sort -b -n将对管道早期阶段产生的行进行数字排序(忽略前导空白)。如果两行开头的编号相同,则将执行这些行的字典顺序。 ordago 2019-07-16T06:15:26+08:002019-07-16T06:15:26+08:00 只需按列再次排序。使用 -k1 按第一列(出现次数)排序,使用 -k2 按第二列(值)排序: awk '{print $5}' FILE | sort | uniq -c | sort -k1 # Sort by ascending occurrences awk '{print $5}' FILE | sort | uniq -c | sort -k2 # Sort by ascending values 如果您需要按降序排列 (-r): awk '{print $5}' FILE | sort | uniq -c | sort -k1 -r # Sort by descending occurrences awk '{print $5}' FILE | sort | uniq -c | sort -k2 -r # Sort by descending values
您只是
sort -b -n
在管道末尾缺少 a (作为它的另一个阶段):sort -b -n
将对管道早期阶段产生的行进行数字排序(忽略前导空白)。如果两行开头的编号相同,则将执行这些行的字典顺序。只需按列再次排序。使用 -k1 按第一列(出现次数)排序,使用 -k2 按第二列(值)排序:
如果您需要按降序排列 (-r):