Lệnh wc trong Linux là công cụ dùng để thống kê số dòng, số từ, số ký tự hoặc byte trong file cũng như trong đầu ra của các lệnh khác, hỗ trợ rất tốt cho việc kiểm tra và phân tích nội dung văn bản trên hệ thống. Trong bài viết này, mình sẽ cùng bạn tìm hiểu chi tiết về lệnh wc trong Linux, từ khái niệm, cú pháp, các tùy chọn thường dùng cho đến những thao tác thực tế và cách kết hợp với các lệnh khác để xử lý dữ liệu hiệu quả hơn trên terminal.
Những điểm chính
Quan điểm của mình: Lệnh wc là một công cụ cơ bản của Unix, chuyên dùng để đếm dòng, từ và ký tự. Giá trị lớn nhất của nó nằm ở khả năng kết hợp với các lệnh khác qua pipelines, giúp nhanh chóng định lượng và xác thực dữ liệu. Nắm vững wc là một bước quan trọng để sử dụng dòng lệnh hiệu quả thông qua nguyên tắc kết hợp công cụ. Dưới đây là những điểm chính cần nắm:
- Khái niệm: Hiểu rõ lệnh wc là công cụ dùng để thống kê dòng, từ, ký tự và byte, giúp bạn nhanh chóng kiểm tra và phân tích nội dung văn bản.
- Cú pháp lệnh wc: Nắm vững cấu trúc cơ bản, gồm tùy chọn và tệp tin, để sử dụng lệnh một cách chính xác cho việc thống kê dữ liệu.
- Các tùy chọn của wc: Nắm vững chức năng từng tùy chọn để thực hiện thống kê tệp tin một cách chính xác và linh hoạt.
- Các ví dụ thực hành: Nắm vững các ví dụ thực tế, giúp bạn áp dụng lệnh wc một cách linh hoạt trong nhiều tình huống, từ việc đếm một file đơn lẻ đến kết hợp với các lệnh khác qua pipeline.
- Lưu ý quan trọng: Nắm được các lưu ý và các lỗi thường gặp, giúp bạn sử dụng lệnh một cách an toàn, chính xác và tránh các kết quả không mong muốn.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc phổ biến, giúp bạn hiểu sâu hơn về khả năng kết hợp và ứng dụng của lệnh wc trong các kịch bản nâng cao.
Lệnh wc trong Linux là gì?
Lệnh wc trong Linux là lệnh dùng để thống kê số dòng, số từ, số ký tự, số byte trong một hoặc nhiều file văn bản, trong dữ liệu được truyền qua stdin từ các lệnh khác. Nhờ khả năng hiển thị nhanh các thông tin thống kê này và hỗ trợ nhiều tùy chọn như -l, -w, -m, -c, -L, lệnh wc thường được sử dụng trong các tác vụ xử lý log, kiểm tra nội dung, đếm file và kết hợp với pipeline để phân tích dữ liệu trên Linux một cách linh hoạt.

Cú pháp lệnh wc trong Linux
Cú pháp lệnh wc trong Linux thường được trình bày dưới dạng: wc [options] [file(s)].
Trong đó:
- [option]: Là các tùy chọn không bắt buộc, dùng để xác định kiểu thống kê cần thực hiện như đếm số dòng, số từ, số ký tự, số byte hoặc độ dài dòng dài nhất.
- [file(s)]: Là tên một hoặc nhiều file được đưa vào để wc thực hiện thống kê. Nếu không chỉ định, dữ liệu sẽ được lấy từ stdin (đầu vào chuẩn).
Các tùy chọn thường dùng của lệnh wc là gì?
| Tùy chọn | Cú pháp ví dụ | Chức năng chính |
-l | wc -l file.txt | Đếm và hiển thị số dòng có trong file hoặc trong dữ liệu đọc từ stdin. |
-w | wc -w file.txt | Đếm số từ trong file, trong đó từ được xác định dựa trên các khoảng trắng và ký tự phân tách. |
-c / --bytes | wc -c file.txt | Đếm tổng số byte của file, thường dùng khi cần kiểm tra kích thước dữ liệu ở cấp độ byte. |
-m | wc -m file.txt | Đếm số ký tự trong file, bao gồm cả khoảng trắng và ký tự đặc biệt. |
-L / --max-line-length | wc -L file.txt | Hiển thị độ dài của dòng dài nhất trong file, hỗ trợ đánh giá độ rộng nội dung để bố trí hiển thị. |
--help | wc --help | In ra màn hình tài liệu trợ giúp, liệt kê đầy đủ các tùy chọn và cách sử dụng lệnh wc. |
--version | wc --version | Hiển thị thông tin phiên bản của lệnh wc đang được sử dụng trên hệ thống. |
--files0-from=FILE | wc -l --files0-from=list.txt | Đọc danh sách tên file từ một file khác, trong đó các tên file được phân tách bằng ký tự NUL (thường kết hợp với find -print0) rồi thực hiện thống kê trên toàn bộ các file đó, phù hợp khi tên file có khoảng trắng hoặc ký tự đặc biệt. |
Cách dùng lệnh wc kèm ví dụ phổ biến
- Đếm số lượng từ (word), dòng (line), ký tự (char) của 1 file
- Đếm số lượng từ (word), dòng (line), ký tự (char) riêng biệt của 1 file
- Đếm số dòng/từ/byte của nhiều file và dòng total
- Đếm qua stdin và pipeline
- Đếm số file hoặc mục trong thư mục
- Đếm file thỏa điều kiện với find
- Đếm số dòng trong file nén bằng zcat
- Định dạng lại kết quả đếm với cut
- Sắp xếp thống kê với sort
- Đếm số file log có chứa lỗi
Đếm số lượng từ (word), dòng (line), ký tự (char) của 1 file
Khi sử dụng lệnh wc không kèm option với một file, hệ thống sẽ trả về tổng quan đầy đủ gồm số dòng, số từ và số byte (hoặc ký tự) của file đó.
wc TPHCM.txt
Kết quả thể hiện trên một dòng lần lượt là số dòng, số từ, số byte và tên file TPHCM.txt, giúp kiểm tra nhanh mức độ nội dung của file.
Đếm số lượng từ (word), dòng (line), ký tự (char) riêng biệt của 1 file
Trong trường hợp chỉ cần một loại thống kê cụ thể, bạn có thể dùng các option tương ứng để tách riêng số dòng, số từ, số byte hoặc số ký tự.
wc -l file.txt
wc -w file.txt
wc -c file.txt
wc -m file.txt
wc -L file.txt
Các câu lệnh trên lần lượt trả về số dòng, số từ, số byte, số ký tự và độ dài dòng dài nhất của file.txt, phù hợp khi phục vụ cho những báo cáo hoặc phân tích chi tiết.
Đếm số dòng/từ/byte của nhiều file và dòng total
Khi bạn cần thống kê cùng lúc nhiều file, wc cho phép liệt kê từng file kèm một dòng tổng hợp cuối cùng. Lệnh này hiển thị số dòng, số từ, số byte cho từng file và thêm dòng total thể hiện tổng cộng các giá trị của tất cả file.
wc file1.txt file2.txt file3.txtĐếm qua stdin và pipeline
Wc có thể nhận dữ liệu từ stdin nên rất hữu ích trong các chuỗi lệnh pipeline, đặc biệt khi cần đếm kết quả sau một bước xử lý nào đó.
cat file.txt | wc -lỞ đây, cat xuất nội dung file ra đầu ra chuẩn, wc -l đếm số dòng, cách viết này thường dùng khi lồng trong chuỗi pipe phức tạp.
Đếm số file hoặc mục trong thư mục
Khi kết hợp với ls hoặc find, wc có thể dùng để đếm số lượng file hoặc thư mục đáp ứng điều kiện. Hai lệnh này lần lượt đếm số mục trong Desktop và số file .txt trong toàn bộ cây thư mục hiện tại.
ls Desktop | wc -l
find . -name "*.txt" | wc -lĐếm file thỏa điều kiện với find
Đối với các trường hợp lọc file theo mẫu tên cụ thể trên nhiều đường dẫn, find kết hợp wc mang lại thống kê nhanh chóng.
find /etc -name "host*" | wc -lLệnh trên liệt kê tất cả file trong /etc có tên bắt đầu bằng “host” rồi dùng wc -l đếm số dòng, tương ứng với số file phù hợp điều kiện.
Đếm số dòng trong file nén bằng zcat
Với file log đã nén, bạn có thể dùng zcat để giải nén ra stdout trước rồi chuyển cho wc xử lý. Câu lệnh này cho biết tổng số dòng trong logfile.gz mà không cần giải nén ra file trung gian.
zcat logfile.gz | wc -lĐịnh dạng lại kết quả đếm với cut
Trong một số kịch bản, kết quả từ wc có thể được cắt gọn lại bằng cut để phục vụ mục đích hiển thị hoặc xử lý tiếp theo.
wc -w city | cut -c 1-2Ví dụ này đếm số từ trong file city rồi dùng cut cắt lấy một phần ký tự từ kết quả trả về.
Sắp xếp thống kê với sort
Khi cần so sánh số dòng giữa nhiều file, bạn có thể kết hợp wc và sort để sắp xếp theo thứ tự tăng dần hoặc giảm dần. Lệnh này thống kê số dòng của tất cả file .log rồi sắp xếp tăng dần theo số dòng, hỗ trợ nhận diện file log ngắn hoặc dài.
wc -l *.log | sort -nĐếm số file log có chứa lỗi
Trong trường hợp cần biết có bao nhiêu file log chứa lỗi, bạn có thể kết hợp grep và wc để đếm số file có ít nhất một dòng khớp từ khóa.
grep -c "error" *.log | wc -lGrep -c đếm số dòng “error” trên từng file, sau đó wc -l đếm số dòng kết quả, tương ứng với số file log có chứa lỗi.
Lưu ý khi sử dụng lệnh wc
Khi sử dụng lệnh wc trong Linux, bạn cần lưu ý một số điểm sau để kết quả thống kê chính xác và thao tác với dữ liệu hiệu quả, đặc biệt khi làm việc với nhiều file, pipeline hoặc ký tự đặc biệt:
- Phân biệt rõ -c và -m:
wc -cđếm số byte, cònwc -mđếm số ký tự; với file chứa ký tự đa byte (UTF-8 tiếng Việt), hai kết quả có thể khác nhau nên cần chọn đúng option theo mục đích (đếm dung lượng hay đếm ký tự hiển thị). - Hiểu đúng ý nghĩa của kết quả mặc định: Khi chỉ chạy
wc file, kết quả thường gồm nhiều cột (dòng, từ, byte/ký tự, tên file), do đó cần đọc đúng thứ tự cột hoặc tham khảo man page để tránh hiểu nhầm số liệu. - Cẩn trọng khi đếm nhiều file: Với nhiều file, wc sẽ in thống kê từng file và có thêm dòng
total, vì vậy khi lấy số tổng, cần sử dụng dòngtotalthay vì cộng tay từng dòng để tránh sai lệch. - Kiểm tra ngữ cảnh khi dùng với pipeline: Khi kết hợp với các lệnh khác như
grep,find,ls, việc wc đếm là số dòng output, không phải số “bản ghi logic”, nên cần thiết kế chuỗi lệnh sao cho mỗi dòng kết quả tương ứng đúng với một đơn vị cần đếm (một file, một dòng log, một kết quả lọc…). - Lưu ý quyền truy cập file: Trước khi dùng wc với các file hệ thống hoặc log yêu cầu đặc quyền, cần đảm bảo tài khoản có quyền đọc hoặc sử dụng thêm
sudokhi cần, nếu không lệnh sẽ trả về lỗi “Permission denied” hoặc bỏ qua các file không truy cập được. - Cẩn thận với tên file chứa khoảng trắng/ký tự đặc biệt: Khi làm việc với danh sách file phức tạp, nên kết hợp
find … -print0vớiwc --files0-from=FILEđể tránh lỗi tách tên file sai do khoảng trắng hoặc ký tự đặc biệt trong tên file.

Dựa trên kinh nghiệm nhiều năm làm việc, mình có hai điểm thực tế muốn chia sẻ.
- Thứ nhất, với
wc -l, bạn hãy nhớ rằng nó thực chất đếm số ký tự xuống dòng (\n). Điều này có nghĩa là nếu dòng cuối cùng của một file không có ký tự này, kết quả sẽ bị thiếu một dòng so với những gì mình thấy trên trình soạn thảo. Đây là một chi tiết nhỏ nhưng đã từng khiến mình nhầm lẫn khi đối chiếu số lượng bản ghi. - Thứ hai, khi
wc -mcho kết quả đếm ký tự bất thường, đặc biệt là khi nó bằng vớiwc -ctrên file có ký tự đa byte, kinh nghiệm của mình là kiểm tra ngay biến môi trườnglocale. Nếu hệ thống không được thiết lập đúnglocale(ví dụ không phải UTF-8), việc đếm ký tự sẽ không chính xác.
Câu hỏi thường gặp
Lệnh wc trong Linux có thể dùng để thống kê nhiều thư mục con cùng lúc không?
Câu trả lời là có, bạn có thể kết hợp find với wc để thống kê nhiều thư mục con, ví dụ: find /var/log -type f -name "*.log" | wc -l sẽ cho biết tổng số file log trong toàn bộ cây thư mục /var/log.
Có thể giới hạn chỉ hiển thị phần số liệu mà không hiện tên file khi dùng wc không?
Câu trả lời là có, bạn có thể dùng thêm các công cụ như awk hoặc cut để loại bỏ cột tên file, ví dụ: wc -l file.txt | awk '{print $1}' chỉ in ra giá trị số dòng mà không kèm tên file.
Lệnh wc trong Linux có áp dụng được cho dữ liệu không phải file văn bản không?
Câu trả lời là có, lệnh wc hoạt động trên luồng byte nên có thể áp dụng với bất kỳ loại file nào; tuy nhiên, với file nhị phân, kết quả đếm dòng và từ thường không có nhiều ý nghĩa, nên trong trường hợp này chỉ số byte (wc -c) thường hữu ích hơn.
Lệnh wc trong Linux không chỉ dừng lại ở chức năng đếm đơn thuần mà còn là thành phần quan trọng trong nhiều chuỗi lệnh phân tích log, thống kê file và xử lý văn bản khi biết cách kết hợp với grep, find, zcat, sort hoặc các lệnh khác. Sau khi nắm vững cú pháp, các tùy chọn cùng những ví dụ thao tác thực tế, bạn có thể linh hoạt ứng dụng lệnh wc trong Linux để tối ưu quy trình làm việc với dữ liệu, đặc biệt trong môi trường quản trị hệ thống và devops.




