本文的内容是 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$
\304\343\272\303 \312\300\275\347$
由此可以很清晰地看出,在 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
hello\tworld$
這個制表符比較特殊,需要分情況來說明一下:
當用 -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 指令統計一下你代碼的詞數和字元數,然後曬出來大家比一比哦!