wc 命令可能是 linux 工具集里最古老也最簡單的工具程序.wc 的默認輸出是一行報告,包括行數(shù),字數(shù)以及字節(jié)數(shù):
echo this is a test of the emergency broadcast system | wc
1 9 49
如果要求僅輸出部分結(jié)果,可以使用的選項有:-c(字節(jié)數(shù)),-l(行數(shù)),-w(字數(shù));
echo test one two three | wc -c
19
echo test one two three | wc -l
1
echo test one two three | wc -w
4
-c 選項原本是表示字符數(shù),但因為有多字節(jié)字符集的編碼存在----像是 UTF-8,因此在當前系統(tǒng)上,字節(jié)數(shù)已不再等同于字符數(shù)了,也因此,posix 出現(xiàn)了-m 選項,用以計算多字節(jié)字符,對 8 位字符數(shù)據(jù)而言,它是等同于-c 的.
雖然 wc 最長處理的是來自于管道的輸入數(shù)據(jù),但它也接受命令行的文件參數(shù),可以生成一行一個結(jié)果,再附上報告:計算兩個文件里的數(shù)據(jù)
輸入命令:wc /etc/passwd /etc/group
輸出結(jié)果:
40 61 1804 /etc/passwd
64 64 874 /etc/group
104 125 2678 總用量
wc 的現(xiàn)代版會隨 locale 而有不同結(jié)果:將環(huán)境變量 LC_CTYPE 設(shè)為想用的 locale,會影響 wc 把字節(jié)序列解釋為字符或單詞分隔器.
做一個操作,需要把一個文件的行數(shù)存在另一個文件里??墒沁@個 wc 還會同時輸出文件名。咋辦?簡單,用管道處理一下
wc -l demo.txt | awk -F" " '{print$1}'
這樣,我們就把想要的文件行數(shù)給取到了,至于存在另一個文件里,我們可以把 awk 的 print 結(jié)果重定向到文件啊,
補充:wc 所有選項
-c:統(tǒng)計字節(jié)數(shù)
-l:統(tǒng)計行數(shù)
-m:統(tǒng)計字符數(shù).這個標志不能與-c 標志一起使用
-w:統(tǒng)計字數(shù).一個字被定義為由空白,挑個或換行字符分隔的字符串.
-L:打印最常行的長度
-help:顯示幫助信息
--version:顯示版本信息