本文的內容是 Linux 的 wc 命令,這個名字很好記,因為什麼,你懂的,對,就是 word count,和我想的一樣!
這個命令的功能也同樣很好記,因為它功能很有限。wc 命令的主要作用就是計算一個檔案中的字數、單詞數和位元組數。我們通過範例來了解一下。
實驗素材
我們為此準備了幾個檔案素材,它們的內容分別是:
#通過cat檢視檔案, 其中兩行內容, 中英文混合
[[email protected] ~]# cat my001.txt
hello world
你好 世界
#檔案的編碼資訊如下
[[email protected] ~]$ file my001.txt
my001.txt: ISO-8859 text
#通過sed可以看到按位元組顯示的內容, 也包括控制符
[[email protected] ~]# sed -n l my001.txt
hello world$
304343272303 312300275347$
由此可以很清晰地看出,在 my001.txt 檔案中:
-
第一行:有 12 個英文半形字元,其中包括肉眼可以看見的“hello world”共 11 個字元,還有最後隱藏著的行尾符($)。
-
第二行:有 6 個字元,肉眼可以看見的“你好世界”,以及最後隱藏著的行尾符($)。
-
論位元組數(byte)的話,第一行包括 12 個位元組,第二行包括 10 個位元組,共 22 個位元組。
-
論字元數(char)的話,第一行 12 個字元,第二行 6 個字元,共 18 個字元。
-
論詞數(word)的話,第一行 2 個詞“hello”和“world”,第二行 2 個詞“你好”和“世界”,共 4 個詞。
-
論行數(line),本檔案共有 2 行。
小提示:
如果你做試驗的檔案的編碼格式是 UTF-8 或其他,則可能會影響統計結果,因為不同編碼格式中漢字所佔的位元組數各不相同。
基本用法演示
我們就針對這個素材檔案,來展示 wc 命令的基本作用:
#-c選項表示以位元組(byte)來計數
[[email protected] ~]# wc -c my001.txt
22 my001.txt
#-m選項表示以字元(char)來計數
[[email protected] ~]# wc -m my001.txt
18 my001.txt
#-l選項表示以行(line)來計數
[[email protected] ~]# wc -l my001.txt
2 my001.txt
#-w選項表示以詞(word)來計數
[[email protected] ~]# wc -w my001.txt
4 my001.txt
經過這幾個範例,相信大家已經基本掌握了 wc 的用法以及它計數的原理了。接下來,我們看一些有關 wc 命令值得了解和關注的地方。
我想找出長度最長的行
wc 命令有一個-L選項,可以顯示一個檔案中最長行的長度。
這裡所謂的最長行,是按照位元組數來計算的,而非字元數(char)或詞數(word),同時要注意的是,在計算最長行的長度時,是不會將行尾符($)計算在內的。
[[email protected] ~]# wc -L my001.txt
11 my001.txt
有關淘氣的製表符
我們搞了一個新的檔案素材,大家看看,其中包括了一個製表符:
#檔案中包含了hello world
[[email protected] ~]$ cat my002.txt
hello world
#兩個單詞之間包含了一個製表符t
[[email protected] ~]$ sed -n l my002.txt
hellotworld$
這個制表符比較特殊,需要分情況來說明一下:
-
當用 -c 時,你會發現其實製表符也沒什麼特殊的,只是算作一個字元(t),因為它的確就只是一個字元而已。
-
而當使用 -w 時,製表符和空格沒什麼兩樣,都是作為字的間隔來看待。
-
當使用 -m 時,從視覺上,你以為 hello 和 world 之間是有 3 個空格,其實 wc 只把它算作一個字元,即 Tab 製表符。
我們來看一下實際的統計結果:
#再看一下檔案內容
[[email protected] ~]$ cat my002.txt
hello world
#統計位元組數
[[email protected] ~]$ wc -c my002.txt
12 my002.txt
#統計字元數
[[email protected] ~]$ wc -m my002.txt
12 my002.txt
#統計詞數
[[email protected] ~]$ wc -w my002.txt
2 my002.txt
讓 wc 輸出全部內容
如果你直接執行 wc 命令,不加任何選項,則會顯示:
#檔案內容
[[email protected] ~]$ cat my001.txt
hello world
你好 世界
#輸出資訊依次是:行數 詞數 位元組數 檔名稱。
[[email protected] ~]$ wc my001.txt
2 4 22 my001.txt
可見,當不使用任何選項來執行 wc 命令時,wc 命令輸出了四個欄位,分別表示:
行數 詞數 位元組數 檔名稱
好了,本文到這裡就結束了,有時間的話,可以用 wc 命令統計一下你程式碼的詞數和字元數,然後曬出來大家比一比哦!