Linux Shell常用技巧(六)

來源:互聯網
上載者:User

標籤:tar   strong   使用   檔案   資料   類   

十二.   行的排序命令sort:

  1.  sort命令列選項:

選項 描述
-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個最為常用的選項,見如下列表:

選項 命令描述
-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  


十四. 檔案壓縮解壓命令tar:

   1.  tar命令列選項

選項 命令描述
-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 xae

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.