Lệnh sort trong Linux là công cụ dùng để sắp xếp các dòng dữ liệu trong file văn bản hoặc trong đầu ra của lệnh khác theo một thứ tự xác định, mặc định dựa trên quy tắc so sánh ký tự trong bảng mã ASCII. Với kinh nghiệm hơn 10 năm thực chiến với Linux, mình muốn chia sẻ một góc nhìn sâu hơn về sort, từ khái niệm, cú pháp, các tùy chọn thường dùng cho đến những ví dụ thao tác thực tế và các lưu ý quan trọng khi sắp xếp dữ liệu theo chữ, số, tháng hoặc theo từng cột.
Những điểm chính
Quan điểm của mình: Lệnh sort là một nền tảng cốt lõi của việc xử lý dữ liệu trên dòng lệnh Linux, vượt trên chức năng sắp xếp thông thường. Giá trị thực sự của nó được bộc lộ mạnh mẽ nhất khi đóng vai trò then chốt trong các chuỗi lệnh (pipelines). Với một quản trị viên hệ thống đối mặt với file log khổng lồ; sort chính là bước đầu tiên để tổ chức sự hỗn loạn đó, gom nhóm các dòng liên quan để các lệnh như uniq hay awk có thể phân tích hiệu quả. Việc nắm vững sort vì thế sẽ nâng tầm terminal thành một công cụ phân tích dữ liệu mạnh mẽ. Dưới đây là những điểm chính cần nắm trong bài viết này:
- Khái niệm: Hiểu rõ lệnh sort là công cụ dùng để sắp xếp dữ liệu, giúp bạn nắm vững nguyên tắc hoạt động và các quy tắc so sánh mặc định.
- Cú pháp lệnh sort: Nắm vững cấu trúc lệnh cơ bản và các thành phần tùy chọn để sắp xếp dữ liệu linh hoạt từ file hoặc đầu vào chuẩn.
- Các tùy chọn lệnh sort: Nắm vững các tham số chính để sắp xếp dữ liệu linh hoạt theo cột, số, thứ tự, và loại bỏ dòng trùng lặp.
- Ví dụ thực tế lệnh sort: Nắm vững cách sử dụng lệnh qua các ví dụ thực tế về sắp xếp cột, số, và kết hợp với các lệnh khác.
- Lưu ý khi dùng lệnh sort: Tránh sai sót bằng cách chọn đúng tùy chọn cho số, cột, và hiểu rõ các quy tắc sắp xếp mặc định.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc liên quan đến lệnh sort trong Linux.
Lệnh sort trong Linux là gì?
Lệnh sort trong Linux là lệnh dùng để sắp xếp các dòng dữ liệu trong file văn bản hoặc trong đầu ra của một lệnh khác theo một thứ tự xác định, mặc định dựa trên quy tắc so sánh ký tự trong bảng mã ASCII. Lệnh này hỗ trợ nhiều kiểu sắp xếp như theo chữ cái, theo giá trị số, theo tháng, sắp xếp đảo ngược, xáo trộn ngẫu nhiên, loại bỏ dòng trùng lặp và sắp xếp theo cột, trong đó toàn bộ dòng được coi là khóa sắp xếp mặc định và khoảng trắng được sử dụng làm ký tự phân tách trường.

Cụ thể hơn, khi sắp xếp theo thứ tự ASCII, lệnh sort áp dụng quy tắc so sánh sau (*):
- Ký tự đặc biệt (!, “, #, $, …) đứng trước chữ và số.
- Chữ số (0–9) đứng trước chữ cái.
- Chữ in hoa (A–Z) được ưu tiên trước chữ thường (a–z).
- So sánh được thực hiện lần lượt từ trái sang phải, dòng nào có chuỗi ký tự “nhỏ hơn” theo bảng ASCII sẽ được xếp ở vị trí trước.
Cú pháp lệnh sort trong Linux là gì?
Cú pháp lệnh sort trong Linux được xây dựng với phần tên lệnh kèm theo các tùy chọn và danh sách file đầu vào, cho phép sắp xếp dữ liệu linh hoạt theo nhiều tiêu chí khác nhau.
Cú pháp: sort [options] [file(s)].
Trong đó:
options: Không bắt buộc, dùng để điều chỉnh kiểu sắp xếp (không phân biệt hoa thường, sắp xếp số, sắp xếp theo tháng, sắp xếp theo khóa cột, đảo ngược thứ tự, loại bỏ dòng trùng lặp, ghi kết quả ra file khác,…).file_name: Tên một hoặc nhiều file cần sắp xếp; nếu không chỉ định file, lệnh sort sẽ nhận dữ liệu từ stdin (đầu vào chuẩn), thường được sử dụng khi kết hợp với các lệnh khác thông qua pipeline.
Các tùy chọn thường dùng của lệnh sort
Các tùy chọn thường dùng của lệnh sort giúp kiểm soát cách dữ liệu được sắp xếp theo chữ, số, tháng, khóa cột, thứ tự tăng/giảm và xử lý dòng trùng lặp, từ đó linh hoạt áp dụng trong nhiều dạng file văn bản và log khác nhau. Dưới đây là bảng tổng hợp chi tiết:
| Tùy chọn | Cú pháp ví dụ | Chức năng chính |
-f, --ignore-case | sort -f names.txt | Sắp xếp bỏ qua phân biệt chữ hoa và chữ thường, “Apple” và “apple” được coi như nhau trong quá trình so sánh. |
-M, --month-sort | sort -M months.txt | Sắp xếp các dòng là tên tháng theo thứ tự tháng trong năm (January, February,…), thay vì dựa trên thứ tự chữ cái. |
-n, --numeric-sort | sort -n numbers.txt | Sắp xếp theo giá trị số, đảm bảo thứ tự 1, 2, 10, 100,… đúng với giá trị số, không theo thứ tự ký tự ASCII. |
-r, --reverse | sort -r data.txt | Đảo ngược thứ tự sắp xếp hiện tại (ví dụ từ Z → A hoặc từ lớn → nhỏ) khi kết hợp với sắp xếp chữ hoặc số. |
-R, --random-sort | sort -R list.txt | Xáo trộn các dòng trong file theo thứ tự ngẫu nhiên, mỗi lần chạy có thể cho kết quả khác nhau. |
-u, --unique | sort -u words.txt | Sắp xếp đồng thời loại bỏ các dòng trùng lặp, chỉ giữ lại đúng một dòng cho mỗi giá trị giống nhau. |
-c, --check | sort -c demo.txt | Kiểm tra file đã được sắp xếp đúng với tiêu chí hiện tại hay chưa, nếu sai sẽ thông báo vị trí dòng bị lệch thứ tự. |
-k, --key=POS | sort -k2 data.txt | Sắp xếp dựa trên khóa (field) tại vị trí POS, thường kết hợp với -n, -r để sắp xếp theo cột số cụ thể, ví dụ cột thứ 2. |
-t, --field-separator=CHAR | sort -t, -k3 users.csv | Đặt ký tự phân tách trường (field separator) thay cho khoảng trắng mặc định, hay dùng với file CSV hoặc dữ liệu phân tách bởi dấu phẩy, dấu chấm phẩy. |
-o, --output=FILE | sort input.txt -o output.txt | Ghi kết quả sắp xếp ra file được chỉ định, có thể dùng để ghi đè file đầu vào hoặc lưu sang file mới. |
Cách thao tác với lệnh sort kèm ví dụ thực tế
- Ví dụ 1: Sắp xếp mặc định theo bảng mã ASCII
- Ví dụ 2: Sắp xếp không phân biệt chữ hoa chữ thường
- Ví dụ 3: Sắp xếp số theo kiểu mặc định (ASCII)
- Ví dụ 4: Sắp xếp theo giá trị số với -n
- Ví dụ 5: Sắp xếp đảo ngược với -r
- Ví dụ 6: Sắp xếp theo cột (key) với -k
- Ví dụ 7: Sắp xếp theo cột với dấu phân tách tùy chỉnh
- Ví dụ 8: Sắp xếp và loại bỏ các giá trị trùng lặp
- Ví dụ 9: Sắp xếp theo tháng với -M
- Ví dụ 10: Sắp xếp theo tháng và đảo ngược
- Ví dụ 11: Xáo trộn nội dung file một cách ngẫu nhiên
- Ví dụ 12: Kiểm tra file đã được sắp xếp hay chưa
- Ví dụ 13: Sắp xếp nhiều file cùng lúc
- Ví dụ 14: Ghi kết quả sắp xếp ra file khác
- Ví dụ 15: Sắp xếp dữ liệu lấy từ lệnh khác qua pipe
- Ví dụ 16: Kết hợp sort với uniq để đếm tần suất từ
Ví dụ 1: Sắp xếp mặc định theo bảng mã ASCII
Khi muốn sắp xếp các dòng trong file theo thứ tự mặc định dựa trên bảng mã ASCII mà không dùng thêm tùy chọn, bạn có thể sử dụng lệnh sau:
sort example.txt
Ví dụ 2: Sắp xếp không phân biệt chữ hoa chữ thường
Nếu cần sắp xếp danh sách từ nhưng bỏ qua sự khác nhau giữa chữ hoa và chữ thường (ví dụ “Apple” và “apple” được xử lý như nhau), hãy áp dụng tùy chọn -f như sau:
sort -f fruit
Ví dụ 3: Sắp xếp số theo kiểu mặc định (ASCII)
Trong trường hợp dữ liệu là số nhưng vẫn để sort hoạt động với chế độ so sánh ký tự mặc định, bạn có thể thực hiện lệnh sau để quan sát cách sắp xếp dạng “1, 100, 12, 2, …”:
sort numbers
Ví dụ 4: Sắp xếp theo giá trị số với -n
Khi muốn sắp xếp danh sách số theo đúng giá trị tăng dần về mặt số học thay vì thứ tự ký tự, hãy sử dụng tùy chọn -n như sau:
sort -n numbers.txt
Ví dụ 5: Sắp xếp đảo ngược với -r
Để đảo ngược thứ tự kết quả sắp xếp (ví dụ từ Z đến A hoặc từ lớn đến nhỏ), bạn có thể thêm tùy chọn -r vào câu lệnh sort như sau:
sort -r numbers.txt
Ví dụ 6: Sắp xếp theo cột (key) với -k
Khi file dữ liệu có nhiều cột và bạn muốn sắp xếp theo một cột nhất định, chẳng hạn cột thứ 2 chứa giá trị số, có thể kết hợp -k và -n như sau:
sort -n -k2 example.txtVí dụ 7: Sắp xếp theo cột với dấu phân tách tùy chỉnh
Nếu dữ liệu được phân tách bằng dấu phẩy như file CSV và bạn cần sắp xếp theo cột thứ 3, có thể dùng -t để đặt dấu phân tách rồi sắp xếp như sau:
sort -t, -k3 example.csvVí dụ 8: Sắp xếp và loại bỏ các giá trị giống nhau
Khi muốn vừa sắp xếp dữ liệu vừa loại bỏ các dòng trùng nhau, chỉ giữ lại một bản ghi duy nhất cho mỗi giá trị, bạn có thể dùng tùy chọn -fu như sau:
sort -fu fruit
Ví dụ 9: Sắp xếp theo tháng với -M
Đối với danh sách chứa tên tháng và cần sắp xếp theo thứ tự thời gian trong năm thay vì thứ tự chữ cái, bạn có thể sử dụng tùy chọn -M như sau:
sort -M months.txt
Ví dụ 10: Sắp xếp theo tháng và đảo ngược
Nếu cần danh sách tháng theo thứ tự ngược từ cuối năm về đầu năm, bạn có thể kết hợp -M với -r trong câu lệnh sau:
sort -Mr months.txtVí dụ 11: Xáo trộn nội dung file một cách ngẫu nhiên
Trong trường hợp bạn muốn xáo trộn thứ tự các dòng trong file để tạo danh sách ngẫu nhiên, hãy sử dụng tùy chọn -R với lệnh sau:
sort -R list.txtVí dụ 12: Kiểm tra file đã được sắp xếp hay chưa
Khi cần kiểm tra một file đã được sắp xếp đúng theo tiêu chí hiện tại hay chưa và phát hiện dòng vi phạm, bạn có thể dùng tùy chọn -c như sau:
sort -c demo-example.txtVí dụ 13: Sắp xếp nhiều file cùng lúc
Nếu bạn muốn sắp xếp dữ liệu của nhiều file như một khối chung rồi in ra kết quả đã sắp xếp, có thể truyền nhiều tên file cho sort theo cú pháp sau:
sort words numbersVí dụ 14: Ghi kết quả sắp xếp ra file khác
Khi cần lưu lại kết quả sắp xếp để sử dụng về sau hoặc để tránh thay đổi file gốc, bạn có thể dùng tùy chọn -o để ghi ra file mới như sau:
sort number.txt -o sorted-number.txtVí dụ 15: Sắp xếp dữ liệu lấy từ lệnh khác qua pipe
Trong các chuỗi lệnh pipeline, nếu muốn sắp xếp kết quả liệt kê thư mục /etc theo thứ tự chữ cái, bạn có thể kết hợp ls với sort như sau:
ls /etc | sort Ví dụ 16: Kết hợp sort với uniq để đếm tần suất từ
Khi cần thống kê tần suất xuất hiện của từng từ trong một file văn bản, bạn có thể kết hợp tr, sort, uniq và sort theo chuỗi lệnh sau:
cat vanban.txt | tr ' ' '\n' | sort | uniq -c | sort -n -r Lưu ý khi sử dụng lệnh sort
Khi sử dụng lệnh sort trong Linux, bạncần lưu ý một số điểm kỹ thuật để kết quả sắp xếp đúng mong muốn và tránh sai lệch khi xử lý dữ liệu thực tế:
- Hiểu rõ chế độ sắp xếp mặc định theo ASCII: Mặc định lệnh sort sắp xếp theo thứ tự ASCII, nên ký tự đặc biệt đứng trước số, số đứng trước chữ, chữ in hoa đứng trước chữ thường Nếu dữ liệu là số nhưng không dùng
-nthì kết quả sẽ dựa trên ký tự chứ không phải giá trị số. - Phân biệt sắp xếp chữ thường/chữ hoa và bỏ qua hoa thường: Khi không dùng
-f, chữ hoa và chữ thường được xử lý khác nhau và ảnh hưởng thứ tự sắp xếp; nếu cần danh sách về mặt chữ hoa – chữ thường, nên thêm-fđể không phân biệt case. - Chọn đúng kiểu sắp xếp số hoặc tháng: Với cột chứa số, nên dùng
-n(hoặc thêm-rkhi cần đảo ngược) để tránh tình trạng 100 đứng trước 2. Với dữ liệu là tháng, cần dùng-Mđể sort theo thứ tự tháng chứ không theo chữ cái. - Xác định chính xác cột và dấu phân tách khi dùng -k, -t: Khi sắp xếp theo cột, cần kiểm tra lại vị trí cột (POS) và ký tự phân tách trường
-t, vì cấu trúc dữ liệu sai hoặc chọn nhầm cột sẽ dẫn đến thứ tự sắp xếp không đúng mục đích. - Cẩn trọng khi dùng -o để ghi đè file: Tùy chọn
-ocho phép ghi trực tiếp kết quả sắp xếp vào file, kể cả file nguồn. Khi dùngsort input.txt -o input.txtcần chắc chắn về dữ liệu vì nội dung sẽ bị ghi lại theo kết quả sắp xếp, không thể quay về trạng thái ban đầu. - Kết hợp sort với uniq và các lệnh khác cần đúng thứ tự: Khi sử dụng sort với uniq để loại trùng hoặc đếm tần suất, phải sort trước rồi mới uniq (
sort file | uniqhoặcsort file | uniq -c), nếu đảo ngược thứ tự pipe thì uniq không hoạt động đúng do dữ liệu chưa được gom nhóm.

Theo kinh nghiệm của mình, sức mạnh thật sự của sort được phát huy tối đa khi bạn kết hợp nó với các lệnh khác qua pipe (|). Cá nhân mình đặc biệt thích công thức sort file.log | uniq -c | sort -nr. Chuỗi lệnh này giúp mình nhanh chóng tìm ra những dòng xuất hiện nhiều nhất trong một file log, cực kỳ hữu ích để phát hiện lỗi hoặc phân tích tần suất. Nó biến một công cụ đơn giản thành một vũ khí phân tích dữ liệu mạnh mẽ.
Câu hỏi thường gặp
Lệnh sort trong Linux có bị ảnh hưởng bởi thiết lập locale không?
Có, lệnh sort trong Linux chịu ảnh hưởng bởi các biến môi trường locale như LC_COLLATE hoặc LC_ALL, điều này tác động đến quy tắc so sánh ký tự (thứ tự chữ cái, cách xử lý dấu tiếng Việt, ký tự Unicode…). Nếu muốn sort theo quy tắc ASCII thuần, có thể đặt LC_ALL=C trước khi chạy lệnh, ví dụ: LC_ALL=C sort file.txt.
Lệnh sort xử lý file dung lượng lớn như thế nào và cần lưu ý gì về hiệu năng?
Với các file rất lớn, sort có thể tạo file tạm và dùng nhiều bộ nhớ, dẫn đến thời gian xử lý tăng đáng kể nếu hệ thống phải swap. Trong trường hợp này nên cân nhắc tách nhỏ file, sort từng phần rồi merge, hoặc điều chỉnh tham số môi trường/bộ nhớ (như --buffer-size, thư mục --temporary-directory) để tối ưu hiệu năng.
Có thể dùng lệnh sort để sắp xếp dữ liệu có đơn vị “K, M, G” (dung lượng, kích thước) không?
Có, bạn có thể sử dụng tùy chọn -h (human-numeric-sort) trong GNU sort để sắp xếp các giá trị dạng “2K, 10M, 1G” theo đúng thứ tự dung lượng. Ví dụ: sort -h sizes.txt sẽ sắp xếp danh sách kích thước có đơn vị thân thiện theo giá trị thực tế thay vì theo thứ tự chữ cái.
Lệnh sort trong Linux là một trong những công cụ xử lý văn bản quan trọng, cho phép sắp xếp và tổ chức lại dữ liệu theo nhiều tiêu chí như ký tự, số, tháng, khóa cột, đồng thời hỗ trợ loại bỏ trùng lặp và kết hợp linh hoạt với các lệnh khác qua pipeline. Sau khi nắm vững cú pháp, các tùy chọn cùng các ví dụ thực hành, bạn có thể áp dụng lệnh sort trong Linux để tối ưu quy trình sắp xếp log, báo cáo và file dữ liệu, đảm bảo kết quả hiển thị rõ ràng, có cấu trúc và dễ phân tích.




