sort
sort 排序
-f #忽略大小写的差异,列如A与a视为编码相同
-b #忽略每行前面开始处的空格字符
-M #以月份的名字来排序,列如JAN,DEC等等的排序方法
-n #使用纯数字 进行排序(默认是以文字形态来排序的)
-r #以相反的顺序来排序
-t #指定排序时所用的栏位分隔字符,默认是用[tab]键来分隔
-k #指定以哪一个区间(field)来进行排序
-u #就是uniq,相同的数据中,仅出现一行代表
-o # 将排序后的结果存入指定的文件
-m #将几个排序好的文件进行合并
+<起始栏位>-<结束栏位> # 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位
-c #检查文件是否已经安装顺序排序
-T #指定临时文件目录,默认在/tmp
-d #排序时,处理英文字母、数字及空格字符外,忽略其他的字符
[root@CentOS6 ~] cat text
vegetable soup
fresh vegetables
fresh fruit
lowfat milk
[root@CentOS6 ~] Sort text
freshfruit
freshvegetables
lowfat milk
vegetable soup
sort 默认是以 [ 第一个数据 ] 进行排序,而且默认是以 [ 文字 ] 形态来排序的
注意:在源文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较
在/etc/passwd内容都是以:来分隔的,我想以第三区间来排序如何?
[root@centos6 ~]# cat /etc/passwd | sort -t ':' -k 3 -n
Op_teach:x:501:504::/home/Op_teach:/bin/bash
Op_office:x:502:508::/home/Op_office:/bin/bash
Op_admin:x:503:506::/home/Op_admin:/bin/bash
Op_finance:x:504:505::/home/Op_finance:/bin/bash
Op_market:x:505:507::/home/Op_market:/bin/bash
不加 -n 的话 默认是以字符形态 来排序的,而这里的第三区间是数字形态,也就是说不加-n,就不会排序
[root@centos6 ~]# last | cut -d ' ' -f1 | sort | uniq -c
[root@centos6 ~]# sort -n # 按数字排序
[root@centos6 ~]# sort -nr # 按数字倒叙
[root@centos6 ~]# sort -u #过滤重复行
[root@centos6 ~]# sort -m a.txt c.txt #将两个文件内容整合到一起
[root@centos6 ~]# sort -n -t' ' -k 2 -k 3 a.txt # 第二区间相同,将从第三区间进行升降处理
[root@centos6 ~]# sort -n -t':' -k 3r a.txt # 以:为分割域的第三区间进行倒叙排列
[root@centos6 ~]# sort -k 1.3 a.txt # 从第三个字母起进行排序
[root@centos6 ~]# sort -t" " -k 2n -u a.txt # 以第二区间进行排序,如果遇到重复的,就删除
Uniq
将重复的数据仅列出一个显示,消除重复行
uniq
-i 忽略大小写字符的不同
-c 进行计数
-d 只显示重复出现的行列
来自: http://man.linuxde.net/uniq
使用last将账号列出,列出登陆次数最多的前两名
[root@centos6 ~]# last | cut -d ‘’ -f1 | uniq -c | sort -rn | head -2
41 root
12 reboot
WC
统计文件里有多少行?多少字?多少字符
wc
-l 仅列出行
-w 仅列出多少字(英文单词);
-m 多少字符
例一:/etc/man.config 里面到底有多少相关字、行、字符数?
[root@centos6 ~]# cat /etc/man.config | wc
141 722 4517
行 字数 字符数
例二:获取这个月份登陆系统的总人次?
[root@centos6 ~]# last | grep [a-z A-Z ] | grep -v 'wtmp' | wc -l
由于last 会输出空白行与wtmp字样在最底下两行,因此,我利用grep取出非空白行,以及去除wtmp哪一行,在计算行数(一行代表一个用户)