当前位置: 首页 » unix(重复的事情交给我吧) » basic_description » Linux下的几个排序与统计指令–sort,wc,uniq

Linux下的几个排序与统计指令–sort,wc,uniq

[文章目录] x

很多时候,我们都会去计算一次数据里头的相同型态的数据总数,举例来说, 使用 last 可以查得这个月份有登入主机者的身份。那么我可以针对每个使用者查出他们的总登入次数吗? 此时就得要排序与计算之类的指令来辅助了!底下我们介绍几个好用的排序与统计指令喔!

一、sort

sort 是很有趣的指令,他可以帮我们进行排序,而且可以依据不同的数据型态来排序喔! 例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此, 如果您需要排序时,建议使用 LANG=C 来让语系统一,数据排序比较好一些。

范例一:个人账号都记录在 /etc/passwd 下,请将账号进行排序。

范例二:/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?

范例三:利用 last ,将输出的数据仅取账号,并加以排序

sort 同样是很常用的指令呢!因为我们常常需要比较一些信息啦! 举个上面的第二个例子来说好了!今天假设你有很多的账号,而且你想要知道最大的使用者 ID 目前到哪一号了!呵呵!使用 sort 一下子就可以知道答案咯!当然其使用还不止此啦! 有空的话不妨玩一玩!

常用的合并后排序

问题1:
sort -t: 4 order.adapter.list >1.order.adapter.list
后来一直报错:sort: 打开失败: +1: 没有那个文件或目录
解决办法:
一查原来是因为我的这个命令比较老了,所以需要进行修改
sort -t: -k 5 -g adapter.list >3.order.adapter.list
上面的才是正确的命令:
 数字大小比较可以用-g的参数代替-n的参数
第四个冒号后的数字是按冒号分开的第5列,应该是-k 5

二、uniq

如果我排序完成了,想要将重复的资料仅列出一个显示,可以怎么做呢?

范例一:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位;

范例二:承上题,如果我还想要知道每个人的登入总次数呢?

这个指令用来将『重复的行删除掉只显示一个』,举个例子来说, 你要知道这个月份登入你主机的用户有谁,而不在乎他的登入次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个指令是在将重复的东西减少,所以当然需要『配合排序过的档案』来处理啰!

三、wc

如果我想要知道 /etc/man.config 这个档案里面有多少字?多少行?多少字符的话, 可以怎么做呢?其实可以利用 wc 这个指令来达成喔!他可以帮我们计算输出的讯息的整体数据!

范例一:那个 /etc/man.config 里面到底有多少相关字、行、字符数?

范例二:我知道使用 last 可以输出登入者,但是 last 最后两行并非账号内容,
那么请问,我该如何以一行指令串取得这个月份登入系统的总人次?

wc 也可以当作指令?这可不是上洗手间的 WC 呢!这是相当有用的计算档案内容的一个工具组喔!举个例子来说, 当你要知道目前你的账号档案中有多少个账号时,就使用这个方法:『 cat /etc/passwd | wc -l 』啦!因为 /etc/passwd 里头一行代表一个使用者呀! 所以知道行数就晓得有多少的账号在里头了!而如果要计算一个档案里头有多少个字符时,就使用 wc -m 这个选项吧!

参考资料:
鸟哥linux私房菜cut linux.vbird.org/linux_basic/0320bash.php#cut


下一篇 :

上一篇 :

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

$(document).ready(function(){ $("#article-index").css('display','none');});