linux - 在 bash 中排序

标签 linux bash command-line shell

我一直试图在 bash 制表符分隔文件的每一列中获取唯一值。所以,我使用了以下命令。

cut -f <column_number> <filename> | sort | uniq -c

它工作正常,我可以获得列中的唯一值及其计数

105 Linux
55  MacOS
500 Windows

我想做的不是按列值名称(在本例中是操作系统名称)排序,而是按计数对它们进行排序,并且可能在此输出格式的第二列中包含计数。所以它必须看起来像:

Windows 500
MacOS   105
Linux   55

我该怎么做?

最佳答案

使用:

cut -f <col_num> <filename>
    | sort 
    | uniq -c
    | sort -r -k1 -n
    | awk '{print $2" "$1}'

sort -r -k1 -n 以相反的顺序排序,使用第一个字段作为数值。 awk 只是颠倒列的顺序。您可以这样测试添加的管道命令(格式更好):

pax> echo '105 Linux
55  MacOS
500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}'
Windows      500
Linux        105
MacOS         55

关于linux - 在 bash 中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510275/

相关文章:

android - 是否有任何努力来开发具有额外/嵌入式安全性的 Dalvik VM?

linux - Windows 和 Linux 下路径名的语法分别是什么?

Linux:从 32 位用户模式程序检测 64 位内核(长模式)

linux - 如果 bash 别名不能接受参数,为什么这些别名可以工作?

bash - 在 bash 脚本中运行 vi 并执行 vi 命令来编辑另一个文件

列出所有可用命令和别名的 Linux 命令

linux - 将 SNMP "Timeout: No Response from <IP_Address>"替换为特定文本

linux - 链接分隔的单词

linux - Web 服务的 Grass 命令

php - 如何设置应用程序,使其在内存中具有持久进程,并且无需重新初始化即可运行?