wc 指令:計算行數、字數與 wc -l 管線用法

測試環境RHEL 系列AlmaLinux 9.8root 帳號2026-10-29 確認

wc 指令是計算並輸出檔案行數、字數與位元組數的 Linux 指令。用 wc -l 計算網頁伺服器存取記錄範例檔的行數會得到 10;用 grep 只篩出 404 回應再交給 wc -l,就能以一個數字看到失敗的請求數 3。

以下的記錄、檔案內容與工作資料夾 /root/work 都是範例值。記錄檔是用文件專用 IP 位址做成的十行檔案,其他檔案也全都是為了測試而建立的。

1️⃣ wc 指令的基本用法與輸出解讀

指令的基本格式依序是 wc、選項、檔案。不加選項只給檔案時,會依序輸出行數、字數、位元組數,並在最後加上檔案名稱。

cd /root/work
wc access.log
 10 100 766 access.log

在計算存取記錄的結果中,10 是行數,100 是字數,766 是位元組數。

只想看一個數字時,加上 -l、-w、-c 其中一個即可。

wc -l access.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

給了不存在的檔案時,會出現錯誤訊息,結束代碼為 1。

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ 用 wc -l 計算行數與管線

計算行數時如果連檔案名稱一起輸出,把數字存進指令稿變數時就得再把名稱切掉一次。用重新導向(<)或管線傳入檔案時,wc 不知道檔案名稱,所以只輸出數字。

wc -l < access.log
10
cat access.log | wc -l
10

在管線前面放 grep,就能只計算符合條件的行。搜尋時連回應碼 404 前後的空格也一起放進去,含有 404 的行有三行。

grep ' 404 ' access.log | wc -l
3

要計算有幾個不同的 IP 連線時,先只切出第一欄,用 sort -u 刪掉重複的行後再計算。在十行的記錄中,不同的 IP 有四個。

cut -d ' ' -f 1 access.log | sort -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -l 計算的是換行字元的數量。因此最後一行結尾沒有換行的檔案,即使 cat 顯示兩行,wc -l 也只輸出 1。

cat no-newline.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

行數少了一行時,先確認最後一行結尾有沒有換行。

3️⃣ wc 選項整理與 -c、-m 字元數

在 UTF-8 中,英文字母與數字每個字元占 1 個位元組,韓文與 ☕ 每個字元占 3 個位元組。所以只有英文的檔案,用 -c 算出的位元組數和用 -m 算出的字元數相同;加入韓文後,兩個數字就會不同。比較用的是含兩行韓文菜單名稱與一行英文的檔案。

cat menu.txt
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 menu.txt

-c 是 38,-m 是 18,相差 20。這是九個韓文字與 ☕ 每個字元各多占 2 個位元組的部分,因此含韓文的檔案要用 -m 計算,才會和實際字元數相符。測量是在 C.UTF-8 語系下進行,依手冊說明,-m 以語系的字元單位計算。

-L 輸出最長一行的顯示寬度。存取記錄中最長的一行是 82 欄;菜單檔案中韓文與 ☕ 每個字元占兩欄,所以 7 個字元的那一行得到 12。

wc -L access.log
82 access.log
wc -L menu.txt
12 menu.txt

帶重音符號的拉丁字母在 UTF-8 中每個字元占 2 個位元組。這是用只有一行 café 的檔案另外測量的。

cat cafe.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 cafe.txt

-c 是 6,-m 是 5,一個 é 多占了 1 個位元組。英文字母與數字占 1 個位元組,像 é 這樣的重音字母占 2 個位元組,韓文與 ☕ 占 3 個位元組,所以即使字元數相同,位元組數也會不同。

下表整理了各項工作適合的指令,以及本文實際算出的數字。

要做的事指令本文實測
只取得行數數字wc -l < access.log10只要數字,不含檔案名稱
計算符合條件的行grep ‘ 404 ‘ access.log | wc -l3404 回應的行
計算不重複的值cut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4不同 IP 的數量
確認檔案大小wc -c access.log766位元組數
含韓文檔案的字元數wc -m menu.txt18同一個檔案用 -c 計算是 38
最長一行的顯示寬度wc -L access.log82菜單檔案把一個韓文字算成兩欄,得到 12
多個檔案的行數總和wc -l *.log13total 行顯示總和

4️⃣ 用 Linux wc 計算多個檔案的總和

給多個檔案時,會每個檔案各輸出一行,並在最後一行以 total 加上總和。把存取記錄和錯誤記錄一起計算時,total 行的 13 就是兩個檔案行數的總和。

wc access.log error.log
 10 100 766 access.log
  3  11  76 error.log
 13 111 842 total

一次計算相同副檔名的記錄時,使用萬用字元。Shell 會把 *.log 換成檔案名稱再傳入,所以結果和逐一寫出檔案名稱相同。

wc -l *.log
 10 access.log
  3 error.log
 13 total

副檔名不同的檔案,只要把名稱接著寫,也能一次計算。兩個記錄檔加上菜單檔案一起計算的結果是 total 16。

wc -l access.log error.log menu.txt
 10 access.log
  3 error.log
  3 menu.txt
 16 total

🔲 wc 指令模擬器

在下方的模擬器中,可以用本文的範例檔案直接輸入 wc。用晶片按鈕可以試試 -l、-m 與管線計算,在 access.log 加一行後再算一次,就會看到增加後的數字。

wc 指令模擬器wc · root 帳號
[root@server work]#
用鍵盤 ↑↓ 鍵可叫出先前輸入過的指令。

🔢 FAQ & 推薦內容

在單一檔案中計算符合條件的行時是一樣的。在同一份存取記錄中,用 grep -c 計算同樣的條件也是 3。grep -c 不用管線,一個指令就完成;wc -l 則用在計算 grep 以外其他指令的結果,例如 sort 或 cut。

以空格、定位字元或換行分隔的每一段都算成一個字。[echo ‘log_level=warn timeout = 30’ | wc -w] 的結果是 4。沒有空格連在一起的 log_level=warn 算一個字,前後有空格的 = 另外算一個字。

用 find 只挑出檔案,再交給 wc -l。在範例資料夾中,[find /root/work -type f | wc -l] 輸出 5。[ls | wc -l] 在同一個資料夾也是 5,但 ls 也會把子資料夾名稱當成一行輸出,而且不會計算子資料夾裡的檔案。

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 2   +   3   =