sort 命令
作用
NAME
sort - sort lines of text files
sort 常用选项和参数:
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN , DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。
ld@ubuntu:~$ cat /etc/passwd | sort | head
avahi-autoipd:x:105 :113 :Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111 :117 :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
colord:x:113 :121 :colord colour management daemon,,,:/var/lib/colord:/bin/false
daemon:x:1 :1 :daemon:/usr/sbin:/usr/sbin/nologin
dnsmasq:x:104 :65534 :dnsmasq,,,:/var/lib/misc:/bin/false
games:x:5 :60 :games:/usr/games:/usr/sbin/nologin
gnats:x:41 :41 :Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
hplip:x:114 :7 :HPLIP system user,,,:/var/run/hplip:/bin/false
/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何
ld@ubuntu:~$ cat /etc/passwd | sort -t ':' -k 3 | head
root:x:0 :0 :root:/root:/bin/bash
ld:x:1000 :1000 :haha,,,:/home/ld:/bin/bash
libuuid:x:100 :101 ::/var/lib/libuuid:
uucp:x:10 :10 :uucp:/var/spool/uucp:/usr/sbin/nologin
syslog:x:101 :104 ::/home/syslog:/bin/false
messagebus:x:102 :106 ::/var/run/dbus:/bin/false
usbmux:x:103 :46 :usbmux daemon,,,:/home/usbmux:/bin/false
dnsmasq:x:104 :65534 :dnsmasq,,,:/var/lib/misc:/bin/false
avahi-autoipd:x:105 :113 :Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
kernoops:x:106 :65534 :Kernel Oops Tracking Daemon,,,:/:/bin/false
默认是以字符串来排序的,如果想要使用数字排序:
ld@ubuntu:~$ cat /etc/passwd | sort -t ':' -k 3 n | head
root:x:0 :0 :root:/root:/bin/bash
daemon:x:1 :1 :daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2 :2 :bin:/bin:/usr/sbin/nologin
sys:x:3 :3 :sys:/dev:/usr/sbin/nologin
sync:x:4 :65534 :sync:/bin:/bin/sync
games:x:5 :60 :games:/usr/games:/usr/sbin/nologin
man:x:6 :12 :man:/var/cache/man:/usr/sbin/nologin
lp:x:7 :7 :lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8 :8 :mail:/var/mail:/usr/sbin/nologin
news:x:9 :9 :news:/var/spool/news:/usr/sbin/nologin
默认是升序排序,如果要倒序排序,如下
ld@ubuntu:~$ cat /etc/passwd | sort -t ':' -k 3 nr | head
nobody:x:65534 :65534 :nobody:/nonexistent:/usr/sbin/nologin
ld:x:1000 :1000 :haha,,,:/home/ld:/bin/bash
sshd:x:116 :65534 ::/var/run/sshd:/usr/sbin/nologin
pulse:x:115 :122 :PulseAudio daemon,,,:/var/run/pulse:/bin/false
hplip:x:114 :7 :HPLIP system user,,,:/var/run/hplip:/bin/false
colord:x:113 :121 :colord colour management daemon,,,:/var/lib/colord:/bin/false
lightdm:x:112 :118 :Light Display Manager:/var/lib/lightdm:/bin/false
avahi:x:111 :117 :Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
speech-dispatcher:x:110 :29 :Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/ sh
whoopsie:x:109 :116 ::/nonexistent:/bin/false
根据第一列排序,并且去重
ld@ubuntu:~$ cat /etc/passwd | sort -t ':' -k 1 -u | head
avahi-autoipd:x:105 :113 :Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111 :117 :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
colord:x:113 :121 :colord colour management daemon,,,:/var/lib/colord:/bin/false
daemon:x:1 :1 :daemon:/usr/sbin:/usr/sbin/nologin
dnsmasq:x:104 :65534 :dnsmasq,,,:/var/lib/misc:/bin/false
games:x:5 :60 :games:/usr/games:/usr/sbin/nologin
gnats:x:41 :41 :Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
hplip:x:114 :7 :HPLIP system user,,,:/var/run/hplip:/bin/false
以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。
ld@ubuntu:~$ cat /etc/passwd | sort -t ':' -k 6.2 ,6.4 -k 1 r | head
kernoops:x:106 :65534 :Kernel Oops Tracking Daemon,,,:/:/bin/false
sync:x:4 :65534 :sync:/bin:/bin/sync
proxy:x:13 :13 :proxy:/bin:/usr/sbin/nologin
bin:x:2 :2 :bin:/bin:/usr/sbin/nologin
sys:x:3 :3 :sys:/dev:/usr/sbin/nologin
usbmux:x:103 :46 :usbmux daemon,,,:/home/usbmux:/bin/false
syslog:x:101 :104 ::/home/syslog:/bin/false
saned:x:108 :115 ::/home/saned:/bin/false
ld:x:1000 :1000 :haha,,,:/home/ld:/bin/bash
whoopsie:x:109 :116 ::/nonexistent:/bin/false
uniq
作用:
NAME
uniq - report or omit repeated lines
常用参数
-i :忽略大小写字符的不同;
-c :进行计数
-u :只显示唯一的行
-c,
prefix lines by the number of occurrences
-d,
only print duplicate lines
-D,
print all duplicate lines delimit-method={none (default),prepend,separate} Delimit‐
ing is done with blank lines
-f,
avoid comparing the first N fields
-i,
ignore differences in case when comparing
-s,
avoid comparing the first N characters
-u,
only print unique lines
-z,
end lines with 0 byte , not newline
-w,
compare no more than N characters in lines
output version information and exit
重复行必须是相邻的,否则 uniq 无效。
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq
hello
world
friend
hello
world
hello
ld@ubuntu:/mnt/hgfs/haShare/test$ uniq testUniq
hello
world
friend
hello
world
hello
排序之后使得重复项目相邻,这样 uniq 才能生效:
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort
friend
hello
hello
hello
world
world
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort | uniq
friend
hello
world
排序之后删除了重复行,同时在行首位置输出该行出现的次数
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort | uniq -c
1 friend
3 hello
2 world
仅显示存在重复的行,并在行首显示该行重复的次数
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort | uniq -dc
3 hello
2 world
仅显示不重复的行
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort | uniq -uc
1 friend
ld@ubuntu:/mnt/hgfs/haShare/test$ cat testUniq | sort | uniq -u
friend
cat 命令
作用
NAME
cut - remove sections from each line of files
SYNOPSIS
cut OPTION... [FILE]...
DESCRIPTION
Print selected parts of lines from each FILE to standard output.
Mandatory arguments to long options are mandatory for short options too.
参数:
[root@www~]
[root@www~]
选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;
ld@ubuntu:~$ echo $PATH
/home/ld/dev/spark/bin:/usr/lib/jvm/java-8 -oracle/bin:/usr/lib/jvm/java-8 -oracle/jre/bin:/home/ld/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
将 PATH 变量取出,我要找出第3个路径。
ld@ubuntu:~$ echo $PATH | cut -d ':' -f 3
/usr/lib/jvm/java-8 -oracle/jre/bin
ld@ubuntu:~$ echo $PATH | cut -d ':' -f 5
/usr/local/sbin
将 PATH 变量取出,我要找出第三和第五个路径。
ld@ubuntu:~$ echo $PATH | cut -d ':' -f 3 ,5
/usr/lib/jvm/java-8 -oracle/jre/bin:/usr/local/sbin
将 PATH 变量取出,我要找出第二到最后一个路径。
ld@ubuntu:~$ echo $PATH | cut -d ':' -f 2 -
/usr/lib/jvm/java-8 -oracle/bin:/usr/lib/jvm/java-8 -oracle/jre/bin:/home/ld/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
将 PATH 变量取出,我要找出第一到第三个路径。
ld@ubuntu:~$ echo $PATH | cut -d ':' -f 1 -3
/home/ld/dev/spark/bin:/usr/lib/jvm/java-8 -oracle/bin:/usr/lib/jvm/java-8 -oracle/jre/bin
实用例子:只显示/etc/passwd的用户和shell
ld@ubuntu:~$ cat /etc/passwd | head | cut -d ':' -f 1 ,7
root:/bin/bash
daemon:/usr/sbin/nologin
bin:/usr/sbin/nologin
sys:/usr/sbin/nologin
sync:/bin/sync
games:/usr/sbin/nologin
man:/usr/sbin/nologin
lp:/usr/sbin/nologin
mail:/usr/sbin/nologin
news:/usr/sbin/nologin