sort命令行選項:mysql
選項 | 描述 |
-t | 字段之間的分隔符 |
-f | 基於字符排序時忽略大小寫 |
-k | 定義排序的域字段,或者是基於域字段的部分數據進行排序 |
-m | 將已排序的輸入文件,合併爲一個排序後的輸出數據流 |
-n | 以整數類型比較字段 |
-o outfile | 將輸出寫到指定的文件 |
-r | 倒置排序的順序爲由大到小,正常排序爲由小到大 |
-u | 只有惟一的記錄,丟棄全部具備相同鍵值的記錄 |
-b | 忽略前面的空格 |
2. sort使用實例:
提示:在下面的輸出結果中紅色標註的爲第一排序字段,後面的依次爲紫、綠。
/> sed -n '1,5p' /etc/passwd > users
/> cat users
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#-t定義了冒號爲域字段之間的分隔符,-k 2指定基於第二個字段正向排序(字段順序從1開始)。
/> sort -t':' -k 1 users
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#仍是以冒號爲分隔符,此次是基於第三個域字段進行倒置排序。
/> sort -t':' -k 3r users
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#先以第六個域的第2個字符到第4個字符進行正向排序,在基於第一個域進行反向排序。
/> sort -t':' -k 6.2,6.4 -k 1r users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#先以第六個域的第2個字符到第4個字符進行正向排序,在基於第一個域進行正向排序。和上一個例子比,第4和第5行交換了位置。
/> sort -t':' -k 6.2,6.4 -k 1 users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基於第一個域的第2個字符排序
/> sort -t':' -k 1.2,1.2 users
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基於第六個域的第2個字符到第4個字符進行正向排序,-u命令要求在排序時刪除鍵值重複的行。
/> sort -t':' -k 6.2,6.4 -u users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
/> cat /etc/passwd | wc -l #計算該文件中文本的行數。
39
/> sed -n '35,$p' /etc/passwd > users2 #取最後5行並輸出到users2中。
/> cat users2
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基於第3個域字段以文本的形式排序
/> sort -t':' -k 3 users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#基於第3個域字段以數字的形式排序
/> sort -t':' -k 3n users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基於當前系統執行進程的owner名排序,並將排序的結果寫入到result文件中
/> ps -ef | sort -k 1 -o result
十三. 刪除重複行的命令uniq:
uniq有3個最爲經常使用的選項,見以下列表:linux
選項 | 命令描述 |
-c | 可在每一個輸出行以前加上該行重複的次數 |
-d | 僅顯示重複的行 |
-u | 顯示爲重複的行 |
/> cat testfile
hello
world
friend
hello
world
hello
#直接刪除未經排序的文件,將會發現沒有任何行被刪除
/> uniq testfile
hello
world
friend
hello
world
hello
#排序以後刪除了重複行,同時在行首位置輸出該行重複的次數
/> sort testfile | uniq -c
1 friend
3 hello
2 world
#僅顯示存在重複的行,並在行首顯示該行重複的次數
/> sort testfile | uniq -dc
3 hello
2 world
#僅顯示沒有重複的行
/> sort testfile | uniq -u
friend sql
十四. 文件壓縮解壓命令tar:
1. tar命令行選項bash
選項 | 命令描述 |
-c | 創建壓縮檔案 |
-x | 解壓 |
--delete | 從壓縮包中刪除已有文件,若是該文件在包中出現屢次,該操做其將所有刪除。 |
-t | 查看壓縮包中的文件列表 |
-r | 向壓縮歸檔文件末尾追加文件 |
-u | 更新原壓縮包中的文件 |
-z | 壓縮爲gzip格式,或以gzip格式解壓 |
-j | 壓縮爲bzip2格式,或以bzip2格式解壓 |
-v | 顯示壓縮或解壓的過程,該選項通常不適於後臺操做 |
-f | 使用檔案名字,這個參數是最後一個參數,後面只能接檔案名。 |
2. tar使用實例:
#將當前目錄下全部文件壓縮打包,須要說明的是不少人都習慣將tar工具壓縮的文件的擴展名命名爲.tar
/> tar -cvf test.tar *
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
/> cp ../*.log . #從上一層目錄新copy一個.log文件到當前目錄。
/> tar -rvf test.tar *.log #將擴展名爲.log的文件追加到test.tar包裏。
/> tar -tvf test.tar
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
/> touch install.log #使原有的文件更新一下最新修改時間
/> tar -uvf test.tar *.log #從新將更新後的log文件更新到test.tar中
/> tar -tvf test.tar #從輸出結果能夠看出tar包中多出一個更新後install.log文件。
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
-rw-r--r-- root/root 48217 2011-11-11 22:20 install.log
/> tar --delete install.log -f test.tar #基於上面的結果,從壓縮包中刪除install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 #從當前目錄將tar中的兩個文件刪除
/> tar -xvf test.tar #解壓
/> ls -l users* #僅列出users和users2的詳細列表信息
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
#以gzip的格式壓縮並打包,解壓時也應該以一樣的格式解壓,須要說明的是以該格式壓縮的包習慣在擴展名後加.gz
/> tar -cvzf test.tar.gz *
/> tar -tzvf test.tar.gz #查看壓縮包中文件列表時也要加z選項(gzip格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 install.log
/> tar -xzvf test.tar.gz #以gzip的格式解壓
/> ls -l *.log users*
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f test.* #刪除當前目錄下原有的壓縮包文件
#以bzip2的格式壓縮並打包,解壓時也應該以一樣的格式解壓,須要說明的是以該格式壓縮的包習慣在擴展名後加.bz2
/> tar -cvjf test.tar.bz2 *
/> tar -tjvf test.tar.bz2 #查看壓縮包中文件列表時也要加j選項(bzip2格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f *.log user*
/> tar -xjvf test.tar.bz2 #以bzip2的格式解壓
/> ls -l
-rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
十五. 大文件拆分命令split:
下面的列表中給出了該命令最爲經常使用的幾個命令行選項:服務器
選項 | 描述 |
-l | 指定行數,每多少分隔成一個文件,缺省值爲1000行。 |
-b | 指定字節數,支持的單位爲:k和m |
-C | 與-b參數相似,但切割時儘可能維持每行的完整性 |
-d | 生成文件的後綴爲數字,若是不指定該選項,缺省爲字母 |
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
/> split -b 5k test.tar.bz2 #以每文件5k的大小切割test.tar.bz2
/> ls -l #查看切割後的結果,缺省狀況下拆分後的文件名爲如下形式。
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xaa
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xab
-rw-r--r--. 1 root root 290 Nov 11 23:34 xac
/> rm -f x* #刪除拆分後的小文件
/> split -d -b 5k test.tar.bz2 #-d選項之後綴爲數字的形式命名拆分後的小文件
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x00
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x01
-rw-r--r--. 1 root root 290 Nov 11 23:36 x02
/> wc install.log -l #計算該文件的行數
/> split -l 300 install.log #每300行拆分紅一個小文件
/> ls -l x*
-rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa
-rw-r--r--. 1 root root 10805 Nov 11 23:42 xab
-rw-r--r--. 1 root root 12340 Nov 11 23:42 xac
-rw-r--r--. 1 root root 11783 Nov 11 23:42 xad
-rw-r--r--. 1 root root 2105 Nov 11 23:42 xaessh