Lệnh wc: đếm số dòng, số từ và cách dùng wc -l với pipe

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8Tài khoản rootKiểm tra ngày 2026-10-29

Lệnh wc là lệnh Linux đếm rồi in ra số dòng, số từ và số byte của một tệp. Khi đếm số dòng của tệp nhật ký truy cập mẫu của máy chủ web bằng wc -l, kết quả là 10, còn khi dùng grep lọc riêng các phản hồi 404 rồi chuyển sang wc -l, bạn có thể thấy số yêu cầu thất bại là 3 dưới dạng một con số duy nhất.

Các nhật ký, nội dung tệp và thư mục làm việc /root/work bên dưới là giá trị ví dụ. Nhật ký là tệp mười dòng được tạo bằng các địa chỉ IP dành cho tài liệu, và các tệp khác cũng đều được tạo để thử nghiệm.

1️⃣ Cách dùng cơ bản lệnh wc và cách đọc kết quả

Dạng cơ bản của lệnh là wc, tiếp theo là tùy chọn, rồi đến tệp. Nếu chỉ đưa tệp mà không có tùy chọn, wc in lần lượt số dòng, số từ, số byte và thêm tên tệp ở cuối.

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

Trong kết quả đếm nhật ký truy cập, 10 là số dòng, 100 là số từ và 766 là số byte.

Để chỉ xem một con số, hãy thêm một trong các tùy chọn -l, -w hoặc -c.

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

Nếu đưa vào một tệp không tồn tại, thông báo lỗi sẽ hiện ra và mã thoát là 1.

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

2️⃣ Đếm dòng bằng wc -l và pipe

Khi tên tệp được in kèm số dòng, bạn phải cắt bỏ tên đó thêm một lần nữa lúc lưu con số vào biến trong script. Nếu chuyển tệp qua chuyển hướng (<) hoặc pipe, wc không biết tên tệp nên chỉ in ra con số.

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

Đặt grep trước pipe thì bạn có thể chỉ đếm những dòng thỏa điều kiện. Việc tìm kiếm có tính cả khoảng trắng trước và sau mã phản hồi 404, và có ba dòng chứa 404.

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

Để đếm có bao nhiêu IP đã kết nối, hãy cắt riêng cột đầu tiên, xóa các dòng trùng bằng sort -u rồi mới đếm. Trong nhật ký mười dòng có bốn IP khác nhau.

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 đếm số ký tự xuống dòng. Vì vậy, với tệp mà cuối dòng cuối cùng không có ký tự xuống dòng, wc -l in ra 1 dù cat hiển thị hai dòng.

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

Nếu số dòng ra thiếu một, trước hết hãy kiểm tra dòng cuối cùng có kết thúc bằng ký tự xuống dòng hay không.

3️⃣ Tùy chọn của wc và số ký tự với -c, -m

Trong UTF-8, chữ cái tiếng Anh và chữ số chiếm 1 byte mỗi ký tự, còn ký tự tiếng Hàn (Hangul) và ☕ mỗi ký tự chiếm 3 byte. Vì vậy, với tệp chỉ có văn bản tiếng Anh, số byte đếm bằng -c và số ký tự đếm bằng -m bằng nhau, nhưng khi có tiếng Hàn thì hai con số khác nhau. Phép so sánh dùng một tệp có hai dòng tên món bằng tiếng Hàn và một dòng tiếng Anh.

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

-c cho 38 và -m cho 18, chênh nhau 20. Đó là 2 byte dư mà mỗi ký tự trong chín ký tự tiếng Hàn và ☕ chiếm thêm, nên với tệp có tiếng Hàn, hãy đếm bằng -m để khớp với số ký tự thực tế. Phép đo được thực hiện trong locale C.UTF-8, và theo tài liệu hướng dẫn, -m đếm theo đơn vị ký tự của locale.

-L in ra độ rộng hiển thị của dòng dài nhất. Trong nhật ký truy cập, dòng dài nhất rộng 82 cột; trong tệp thực đơn, mỗi ký tự tiếng Hàn và ☕ chiếm hai cột, nên một dòng 7 ký tự cho ra 12.

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

Chữ Latinh có dấu chiếm 2 byte mỗi ký tự trong UTF-8. Điều này được đo riêng bằng một tệp chỉ có một dòng café.

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

-c cho 6 và -m cho 5, vì một chữ é chiếm thêm 1 byte. Chữ cái tiếng Anh và chữ số chiếm 1 byte, chữ có dấu như é chiếm 2 byte, còn ký tự tiếng Hàn và ☕ chiếm 3 byte, nên dù cùng số ký tự, số byte vẫn khác nhau.

Bảng dưới đây tổng hợp lệnh phù hợp với từng việc và con số đã đếm trong bài viết này.

Việc cần làmLệnhĐo trong bài viết này
Chỉ lấy số dòng dưới dạng con sốwc -l < access.log10Chỉ con số, không có tên tệp
Đếm các dòng thỏa điều kiệngrep ‘ 404 ‘ access.log | wc -l3Các dòng có phản hồi 404
Đếm các giá trị khác nhaucut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Số IP khác nhau
Kiểm tra kích thước tệpwc -c access.log766Số byte
Số ký tự của tệp có tiếng Hànwc -m menu.txt1838 khi đếm cùng tệp đó bằng -c
Độ rộng hiển thị của dòng dài nhấtwc -L access.log8212 với tệp thực đơn, vì mỗi ký tự tiếng Hàn được tính là hai cột
Tổng số dòng của nhiều tệpwc -l *.log13Tổng ở dòng total

4️⃣ Tổng của nhiều tệp với wc trên Linux

Nếu đưa vào nhiều tệp, wc in mỗi tệp một dòng và thêm tổng ở dòng cuối dưới tên total. Khi đếm chung nhật ký truy cập và nhật ký lỗi, số 13 ở dòng total là tổng số dòng của hai tệp.

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

Để đếm một lần các nhật ký có cùng phần mở rộng, hãy dùng ký tự đại diện. Shell đổi *.log thành tên các tệp rồi mới chuyển đi, nên kết quả giống như khi ghi từng tên tệp.

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

Các tệp có phần mở rộng khác nhau cũng đếm được một lần nếu ghi tên nối tiếp nhau. Hai nhật ký và tệp thực đơn được đếm chung cho kết quả total 16.

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

🔲 Trình mô phỏng lệnh wc

Trong trình mô phỏng bên dưới, bạn có thể tự gõ wc với các tệp ví dụ trong bài. Các nút chip cho phép thử -l, -m và đếm qua pipe, và nếu thêm một dòng vào access.log rồi đếm lại, con số sẽ tăng lên.

Trình mô phỏng lệnh wcwc / tài khoản root
[root@server work]#
Dùng phím ↑↓ trên bàn phím để gọi lại các lệnh đã gõ trước đó.

🔢 FAQ & nội dung đề xuất

Có, khi đếm các dòng thỏa điều kiện trong một tệp. Trên cùng nhật ký truy cập, grep -c với cùng điều kiện cũng cho 3. grep -c xong việc chỉ bằng một lệnh, không cần pipe, còn wc -l được dùng để đếm kết quả của các lệnh khác ngoài grep, như sort hay cut.

wc -w tính mỗi cụm được ngăn cách bằng khoảng trắng, tab hoặc ký tự xuống dòng là một từ. Kết quả của [echo ‘log_level=warn timeout = 30’ | wc -w] là 4. log_level=warn viết liền không có khoảng trắng được tính là một từ, còn dấu = có khoảng trắng hai bên được tính là một từ riêng.

Dùng find để chọn riêng các tệp rồi chuyển sang wc -l. Trong thư mục ví dụ, [find /root/work -type f | wc -l] in ra 5. [ls | wc -l] cũng cho 5 trong cùng thư mục, nhưng ls còn in cả tên thư mục con thành dòng và không đếm các tệp bên trong chúng.

🪐Tham khảoNguồn chính thức 2

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 6   +   5   =