Shell指令碼學習指南之文本處理工具_linux shell

來源:互聯網
上載者:User

4.1 排序文本

4.1.1 行的排序
未提供命令列選項時,整個記錄會根據當前locale所定義的次序排序。
在傳統的C locale中,也就是ASCII順序。

4.1.2 以欄位排序
-k選項的後面接著的是一個欄位編號,或者是一對數字。
每個編號後面都可以接一個點號的字元位置,或修飾符字母。

如果僅指定一個欄位編號,則排序索引值會自該欄位的起始處開始,
一直繼續到記錄的結尾(而非欄位的結尾)。

如果給的是一對用逗號隔開的欄位數字,則排序索引值將由第一個欄位值的起始處開始,
結束於第二個欄位值的結尾。使用點號表示字元位置。
-k2.4, 5.6指的是從第二個欄位的第四個字元開始比較,一直比到第五個欄位的第六個字元。
$ sort -t: -k1,1 /etc/passwd     以使用者名稱稱排序
bin:x:1:1:bin:/bin:/sbin/nologin
chico:x:12501:1000:Chico Marx:/home/chico:/bin/bash
harpo:x:12502:1000:Harpo Marx:/home/harpo:/bin/ksh
...

$ sort -t: -k3,3nr /etc/passwd     反省UID排序
或-k3nr,3或-k3,3 -n -r都可以。

4.1.3 文字區塊的排序
有時需要對多行記錄組合而成的資料排序。以地址清單為例:
$ cat my-friends
# SORTKEY: Schlo, Hans Jurgen
Hans Jurgen Schlo
Unter den Linden 78
D-10117 Berlin
Germany

# SORTKEY: Jones, Adrian
...

技巧是:利用awk識別段落間隔,在每個地址內暫時使用一個未用過的字元取代分行。
sort看到的行就會變成這樣:
# SORTKEY: Schlo, Hans Jurgen^ZHans Jurgen Schlo^ZUnter den Linden 78^Z...
cat my-friends |               讀取地址檔案
     awk -v RS=" " '{ gsub("\n", "^Z"); print }' |    轉換地址為單行
          sort -f |           排序地址資料,忽略大小寫
               awk -v ORS="\n\n" '{ gsub("^Z", "\n"); print }' |  恢複行結構
                    grep -v '# SORTKEY'   刪除標記行
1. 函數gsub()為全域性替換(global substitution),類似sed下的s/x/y/g結構。
2. RS變數時輸入資料的記錄分隔器(Record Separator)。
   通常輸入資料以換行隔開,使每行成為單個記錄。
    RS=" "是一個特殊用法,指的是記錄以空行隔開。
3. ORS是輸出記錄分隔器。
註:'{ action }'是對每個欄位的操作,而RS,ORS都是對記錄的設定。

4.1.5 sort的穩定性
sort並不穩定。

4.2 重複資料刪除
sort -u是依據匹配的索引值進行消除操作,而非匹配的記錄。
uniq有3個好用選項:
     -c在每個輸出行之前加上該行重複的次數。
     -d則用於僅顯示重複的行。
     -u僅顯示未重複的行。

4.3 重新格式化段落
fwt -w 30

4.4 計算行數、字數以及字元數
wc的預設輸出是一行報告,包括行數、字數以及位元組數。
可用選項:-c(位元組數)、-l(行數)、-w(字數)。

複製代碼 代碼如下:

$ echo Testing one two three | wc -c
1 4 22
$ wc /etc/passwd /etc/group


4.6 提取開頭或結尾數行
顯示檔案清單中每一個的前n條記錄:
head -n n [file(s)]
head -n [file(s)]
awk 'FNR <= n' [file(s)]
sed -e nq [file(s)]
sed nq [file(s)]

觀察不斷增長的系統資訊日誌,Ctrl-C停止tail。

複製代碼 代碼如下:

$ tail -n 25 -f /var/log/messages

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.