Bash Shell数字排序

数值进行排序时,你发现结果有问题。

$ sort somedata
2
200
21
250
$

解决方案

你得用 -n 选项告诉 sort 将数据作为数值排序。

$ sort -n somedata
2
21
200
250
$

讨论

第一个排序结果并没有问题(尽管怪异),因为它是对数据按照字母排序的(也就是说,21 排在 200 的后面,因为在字母排序中,1 位于 0 之后)。当然,你需要的可能是按照数值排序,因此得使用 -n 选项。

如果配合 uniq -c 使用,sort -rn 可以非常方便地给出一个按照降序排列的使用频率列表。例如,我们来展示一下系统中最常用的 shell。

$ cut -d':' -f7 /etc/passwd | sort | uniq -c | sort -rn
     20 /bin/sh
     10 /bin/false
      2 /bin/bash
      1 /bin/sync
$

cut -d':' -f7 /etc/passwd 用于提取 /etc/passwd 文件中各个用户所使用的 shell。然后,必须先进行一次排序,这样 uniq 才能正常工作。uniq -c 统计连续出现的重复行,这正是我们需要预排序的原因。sort -rn 按照数值进行逆向排序,最常用的 shell 出现在最前面。

如果不需要统计出现次数,只是想得到一个不重复的列表(也就是说,想通过 sort 去掉重复内容),那么可以使用 sort 命令的 -u 选项(无须使用 uniq 命令)。因此,要想找出系统中都有哪些 shell,可以使用下列命令。

cut -d':' -f7 /etc/passwd | sort -u

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!