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 3n | 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 3nr | 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 1r | 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