介绍好用的排序与统计指令。
- sort
- uniq
- wc
sort
sort可以帮我们进行排序,而且可以依据不同的数据型态来排序。例如数字与文字排序不一样。此外,排序的字符与语系的编码有关,因此,如果需要排序,建议使用LANG=C来让语系统一,数据排序比较好一些。
$ sort [-fbMnrtuk][file or stdin]
选项与参数:
-f:忽略大小写差异;
-b:忽略最前面的空格符部分;
-M:以月份的名字来排序,例如JAN,DEC等排序方法;
-n:使用【纯数字】进行排序(默认以文字型态排序);
-r:反向排序;
-u:就是uniq,相同的数据,仅出现一行代表;
-t:分隔符,预设【tab】键来分隔;
-k:以哪个区间进行排序。
example1:将/etc/passwd下账号进行排序。
debian@debian-pc:~$ cat /etc/passwd | sort
_apt:x:104:65534::/nonexistent:/bin/false
avahi:x:111:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
debian:x:1000:1000::/home/debian:/bin/bash
deepin-daemon:x:110:121::/home/deepin-daemon:/bin/false
#sort预设【以第一个】数据开排序,且默认以【文字】型态排序,由a排到最后。
example2:/etc/passwd内容以:来分隔,以第三栏排序。
debian@debian-pc:~$ cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
debian:x:1000:1000::/home/debian:/bin/bash
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
pulse:x:106:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
uniq
如果排序完成了,想要将重复的资料仅列出一个显示,可以怎么做?
uniq [-ic]
选项与参数:
-i:忽略大小写;
-c:进行计数
example1:
使用last将账号列出,仅取出账号栏,进行排序后仅取出一位。
debian@debian-pc:~$ last | cut -d ' ' -f1 |sort |uniq
example2:
承上题,如果想知道每个人的登录次数?
debian@debian-pc:~$ last | cut -d ' ' -f1 |sort |uniq -c
wc
如果想知道/etc/man.config 这个文档里面有多少字?多少行?多少字符,就可以用wc这个指令。
wc [-lwm]
选项与参数:
-l:仅列出多少行;
-w:仅列出多少字(英文单字);
-m:多少字符。
example1:
那个/etc/man.config里面有多少行、字、字符数?
debian@debian-pc:~$ cat /etc/manpath.config | wc
131 714 5170
#输出三个数字,分别代表:行、字符、字数、字符数
example2:
使用last输出登录者,但是last最后两行并非账号内容,该如何以一行指令串取得这个月登录系统的总人次?
debian@debian-pc:~$ last | grep [a-zA-Z] | grep -v ''wtmp | wc -l
4
#由于last输出空白行及wtmp字样在最底下,因此,使用grep取出非空白行及去除wtmp那一行。