Linux命令之文本處理(一),linux命令文本處理

來源:互聯網
上載者:User

Linux命令之文本處理(一),linux命令文本處理

wc命令

用來統計檔案的字元數、行數、單詞數等,很常用的命令(面試的時候竟然沒想起來這個命令,我是有多麼挫。。。)
使用格式為:wc options file-lists,若file-lists為空白或“-”,則表示從標準輸入讀入資料;options為空白的時候,預設輸出的資料依次是行數、單詞數、位元組數,如下:

    m@meng:~$ wc examples.desktop    240  569 8980 examples.desktop

下面介紹各個選項:

  • -c:只顯示位元組數,注意是位元組而不是字元,不同語言的一個字元佔據的位元組數是不同的,一個英文字母一般只佔一個位元組。
        m@meng:~$ cat new        a        m@meng:~$ wc -c new         2 new

檔案new中只有一個字母a,但是統計結果卻是2個位元組,這是因為,wc把檔案末尾的分行符號也統計在內,這個分行符號也是挺有趣的,改天我會寫一篇文章分析一下。

  • -m:只顯示字元數,用漢語實驗一下:
        m@meng:~$ cat new         你好        m@meng:~$ wc -c new         7 new        m@meng:~$ wc -m new         3 new

算上分行符號,的確只有三個字元;但是佔用的位元組數卻是7,說明一個漢字佔用3個位元組。

  • -l:只顯示行數

  • -L:顯示最長行的長度,如下:

    m@meng:~$ cat new     baa    m@meng:~$ wc -L new     3 new

由此可見,行的長度不包含行尾換行。

  • -w:顯示單詞數,準確的含義是: A word is a non-zero-length sequence of characters delimited by white space.

sort命令

看來排序是電腦的一個剛性需求,無論哪個領域似乎都需要排序。sort用來對檔案的行進行排序,輸出排好序的結果,不改變源檔案。
sort進行排序的單位是行,它會從每行的第一個字母開始比較,按照第一個字母的ASCII值從小到大排列行;若某兩行的第一個字母相同,則比較它們的第二個字母,以此類推。但是,這種排序會受到locale環境變數的影響,不一定出現想要的結果,如下:

    m@meng:~$ cat new     apple 3    Apple 7    pear 6    pear  4    banana 1    orange 8    m@meng:~$ sort new     apple 3    Apple 7    banana 1    orange 8    pear  4    pear 6

按照ASCII的話,Apple應該排在第一行,但是它卻出現在第二行,這是因為當前的locale是zh_CN,修改後如下:

    m@meng:~$ export LC_ALL=C    m@meng:~$ sort new     Apple 7    apple 3    banana 1    orange 8    pear  4    pear 6

注意,修改成en_US是不管用的,改成C是因為 manual中有句話“The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values”,現在按照想要的方式排序了。

  • -t與-k選項
    sort命令更強大或更常用的功能是對格式化的行進行排序,格式化是指每行由某個分隔字元分成了有規律的幾段,這樣以來就可以指定按照哪個段來排序,而不是像普通的排序那樣從每行的開頭逐個字元比較。如果每行的資料是不規律的,那麼按欄位排序是無效的。
    -t用來指定分隔字元,-k用來指定哪個欄位,欄位從1開始計數。例如:
      m@meng:~$ sort -t " " -k 2 new       banana 1      apple 3      pear  4      pear 6      Apple 7      orange 8

預設的分隔字元是那些空白字元,如空格,tab等,對這些分隔字元可以省略-t,所以上面的-t ” “是多次一舉;分隔字元只能是單個字元,所以一般不用加引號。
可以指定多個-k選項,比如-k 2 -k 3,表示先按第二個欄位排序,當第二個欄位相同時,按第三個欄位排序。-k還有一些更複雜的用法,參見man。

  • -n選項
    按照數字大小排序。預設情況下,文本中的數字是被當做一般字元串的,而不是真正的數字。我們現在把文本中的orange數量改成11,沒有-n時如下:
      m@meng:~$ sort new -k 2      banana     1      orange     11      apple  3      pear   4      pear   6      Apple  7

orange被排在第二行,這是典型的字串排序方式。加上-n之後,如下:

      m@meng:~$ sort new -k 2 -n      banana     1      apple  3      pear   4      pear   6      Apple  7      orange     11
  • -r選項:反向排序。配合-k選項時,可以直接寫在欄位數後面。
  • -o選項:相當於重新導向,指定輸出檔案,排序結果不再輸出到標準輸出,而是到指定的檔案中。
  • -c選項:並不真正排序,只是檢查檔案是否已經排好序。
  • -u選項:除去重複的行。有人認為也可以配合-k除去某欄位值相同的行,我實驗了一下,似乎不行,如下:
        m@meng:~$ sort new -k 1 -u        Apple    7        apple    3        banana   1        orange   11        pear     4        pear     6

看來要兩行完全相同才能除去。

  • -d選項:只考慮字母和空白字元,其他字元自動忽略,如# $ %等。
  • -f選項:忽略大小寫。
  • -i選項:忽略非列印字元。
    主要的就是這幾個選項了,以後遇到其他不錯的選項再補充。

聯繫我們

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