Lệnh sort trong Linux được dùng để sắp xếp các dòng trong file văn bản. Mặc định, lệnh này coi mọi thứ đều là ký tự ASCII và sắp xếp dựa trên giá trị ASCII của nội dung. Tuy nhiên, bạn có thể tùy chỉnh kết quả bằng nhiều tùy chọn khác nhau. Trong bài viết này, Vietnix sẽ hướng dẫn bạn cách sử dụng lệnh sort với nhiều ví dụ cụ thể.
Lệnh sort trong Linux là gì?
Lệnh sort trong Linux là một công cụ giúp bạn sắp xếp nội dung trong file, rất phổ biến trong hệ điều hành Unix và tương tự Unix. Trong bảng mã ASCII, mỗi ký tự đều có một giá trị số riêng.
Ví dụ, giá trị ASCII của “A” là 65 và của “a” là 97. Vì vậy, nếu bạn muốn sắp xếp “A” và “a”, “A” sẽ luôn xuất hiện trước. Tuy nhiên, bạn có thể tùy chỉnh để bỏ qua sự phân biệt chữ hoa chữ thường và còn có thể sắp xếp nhiều kiểu khác nhau.
Lệnh sort trong Linux có cú pháp như sau:
sort [OPTION]... [FILE]...
Mọi người cũng xem:
9 tùy chọn của lệnh sort trong Linux
Lệnh sort trong Linux có rất nhiều tùy chọn hữu ích, bạn có thể tự mình khám phá bằng cách gõ lệnh sau vào terminal:
man sort
Dưới đây là các tùy chọn thường sử dụng của lệnh sort:
Tùy chọn | Mô tả |
-f, --ignore-case | Sắp xếp không phân biệt chữ hoa chữ thường (ví dụ: “a” và “A” sẽ được coi là như nhau). |
-M, --month-sort | Sắp xếp theo tháng (ví dụ: “Tháng Giêng”, “Tháng Hai”,…). |
-n, --numeric-sort | Sắp xếp theo giá trị số (ví dụ: 1, 2, 10, 100). |
-R, --random-sort | Xáo trộn nội dung của file một cách ngẫu nhiên. |
-r, --reverse | Đảo ngược thứ tự sắp xếp (ví dụ: từ lớn đến bé thay vì từ bé đến lớn). |
-c, --check | Kiểm tra xem một file đã được sắp xếp hay chưa. |
-k, --key | Sắp xếp theo khóa (ví dụ: sắp xếp theo cột thứ 2 của một file dữ liệu). |
-o, --output | Lưu kết quả sắp xếp vào một file khác. |
-u, --unique | Loại bỏ các dòng trùng lặp. |
Cấu hình hệ thống
Trong quá trình làm theo các ví dụ, bạn có thể thấy kết quả hiển thị khác với kết quả của Vietnix. Để tránh nhầm lẫn, bạn nên làm một hoặc hai ví dụ trước, sau đó quay lại đây nếu cần.
Nếu bạn thấy kết quả khác, nguyên nhân có thể nhất là do cài đặt ngôn ngữ (localization) của hệ thống. Nói đơn giản, “localization” là ngôn ngữ mà hệ điều hành đang sử dụng. Mỗi ký tự sẽ được biểu diễn theo một thứ tự nhất định và thay đổi cài đặt ngôn ngữ có thể ảnh hưởng đến kết quả của lệnh sort trong Linux.
Để giải quyết tạm thời, hãy làm theo 3 bước sau:
Bước 1: Mở Terminal.
Bước 2: Gõ lệnh sau vào cửa sổ lệnh:
export LC_ALL=C
Bước 3: Nhấn phím ENTER.
Để có thể giải quyết được vấn đề này mãi mãi bạn làm theo 5 bước như sau:
Bước 1: Mở Terminal.
Bước 2: Gõ lệnh sau và nhấn Enter để chỉnh sửa file:
nano ~/.bashrc
Bước 3: Di chuyển đến cuối file và thêm dòng sau:
export LC_ALL=C
Bước 4: Nhấn Ctrl + O để lưu, rồi Enter. Sau đó, nhấn Ctrl + X để thoát.
Bước 5: Gõ lệnh sau và nhấn Enter để cập nhật môi trường.
source ~/.bashrc
Hãy thêm một dòng như bên dưới, sau đó cập nhật môi trường.
16 Ví dụ cụ thể lệnh sort Linux
- Sắp xếp file chứa các chữ cái thường
- Sắp xếp một file chứa các chữ cái viết hoa và viết thường lẫn lộn
- Sắp xếp không phân biệt chữ hoa chữ thường bằng lệnh sort trong Linux
- Sắp xếp từ trong file bằng lệnh sort trong Linux
- Sắp xếp số bằng lệnh sort trong Linux
- Sắp xếp ngược bằng lệnh sort trong Linux
- Sắp xếp nhiều file bằng lệnh sort trong linux
- Sắp xếp một cột bằng lệnh sort trong Linux
- Sắp xếp và loại bỏ các từ trùng lặp bằng lệnh sort trong Linux
- Sắp xếp danh sách tháng theo thứ tự với lệnh sort
- Sắp xếp nội dung của một file và lưu kết quả vào một file mới
- Kiểm tra xem file đã được sắp xếp hay chưa bằng lệnh sort trên Linux
- Sắp xếp ngẫu nhiên bằng lệnh sort trên Linux
- Kết hợp lệnh sort trong Linux và join
- Sắp xếp dữ liệu theo dấu phân cách bằng lệnh sort trong Linux
- Sắp xếp theo trường bằng lệnh sort trong Linux
Dưới đây Vietnix sẽ giới thiệu một số ví dụ về cách sử dụng lệnh sort trong Linux. Vì lệnh này sắp xếp lại nội dung của file, Vietnix sẽ sử dụng các file (letters, mix_letters, words, month, data.csv).
Ví dụ 1: Sắp xếp file chứa các chữ cái thường
Giả sử bạn có một file tên là letters chứa các chữ cái. Để sắp xếp file theo thứ tự bảng chữ cái, bạn có thể làm như sau:
Bước 1: Mở Terminal
Bước 2: Gõ lệnh và nhấn ENTER:
cat letters
sort letters
Kết quả sẽ là các chữ cái được sắp xếp từ a đến z. Điều này là do lệnh sort sử dụng bảng mã ASCII, trong đó chữ “a” có giá trị thấp hơn chữ “z”.
Ví dụ 2: Sắp xếp một file chứa các chữ cái viết hoa và viết thường lẫn lộn
Điều gì sẽ xảy ra khi các chữ cái viết hoa và viết thường được trộn lẫn với nhau. Vietnix sẽ làm việc với một file có tên là “letters”. Các bạn hãy làm theo 3 bước sau:
Bước 1: Mở Terminal trong Ubuntu.
Bước 2: Gõ lệnh sau vào cửa sổ lệnh:
cat letters
sort letters
Bước 3: Nhấn phím ENTER.
Do trong bảng mã ASCII, giá trị của các chữ cái “A”, “Z”, “a” và “z” lần lượt là 65, 90, 97 và 122, nên khi bạn dùng lệnh sort, các chữ cái in hoa sẽ được xếp trước các chữ cái in thường.
Ví dụ 3: Sắp xếp không phân biệt chữ hoa chữ thường bằng lệnh sort trong Linux
Nếu bạn muốn sắp xếp mà không quan tâm đến việc chữ cái là hoa hay thường, bạn có thể làm điều đó bằng cách làm theo 3 bước sau. Sử dụng file letters ở đây:
Bước 1: Mở Terminal của Ubuntu.
Bước 2: Nhập lệnh sau vào dòng lệnh:
sort -f letters
Bước 3: Nhấn nút ENTER. Như bạn thấy, các chữ cái hoa và thường bây giờ đã được xếp cùng nhau. Nhưng các chữ cái vẫn tuân theo thứ tự ASCII; bạn có thể thấy “A” xuất hiện trước “a”.
Ví dụ 4: Sắp xếp từ trong file bằng lệnh sort trong Linux
Bây giờ, Vietnix sẽ sắp xếp các từ trong một file có tên là “words”. Làm theo 3 bước sau:
Bước 1: Mở ứng dụng Terminal trong Ubuntu.
Bước 2: Trong cửa sổ Terminal, gõ lệnh sau:
cat words
sort words
Bước 3: Sau khi gõ lệnh, nhấn phím ENTER.
Giải thích: Lệnh này sẽ sắp xếp các từ trong file “words” theo thứ tự bảng chữ cái. Nếu hai từ có cùng chữ cái đầu tiên, hai từ này sẽ được so sánh dựa trên chữ cái thứ hai, và cứ tiếp tục như vậy. Ví dụ:
- “zebra” sẽ đứng trước “zoo” vì “e” đứng trước “o” trong bảng chữ cái.
- Nếu có hai từ giống nhau (ví dụ: “today”), hai từ sẽ được giữ nguyên vị trí cạnh nhau.
Ví dụ 5: Sắp xếp số bằng lệnh sort trong Linux
Lệnh sort trong Linux có thể sắp xếp số theo thứ tự. Bạn hãy thử làm theo 3 bước sau (Vietnix sẽ sử dụng một file có tên là “numbers” để làm ví dụ):
Bước 1: Mở Terminal.
Bước 2: Gõ lệnh sau:
cat numbers2
sort -n numbers2
Bước 3: Nhấn phím ENTER. Kết quả ban đầu các số trong file “numbers” lộn xộn, sau khi chạy lệnh sẽ được sắp xếp theo thứ tự.
Ví dụ 6: Sắp xếp ngược bằng lệnh sort trong Linux
Sắp xếp ngược có nghĩa là đảo ngược thứ tự sắp xếp. Giá trị lớn nhất sẽ nằm ở đầu, còn giá trị nhỏ nhất sẽ nằm ở cuối. Để làm điều này, bạn có thể thực hiện 3 bước sau:
Bước 1: Mở Terminal trong Ubuntu.
Bước 2: Gõ lệnh sau:
cat numbers
sort -r numbers
Bước 3: Nhấn Enter. Kết quả là dữ liệu trong file sẽ được sắp xếp theo thứ tự giảm dần.
Ví dụ 7: Sắp xếp nhiều file bằng lệnh sort trong Linux
Sắp xếp nhiều file rất đơn giản, gần giống như sắp xếp một file. Bạn chỉ cần liệt kê nhiều file làm tham số. Ở đây mình dùng cả file chữ và file số làm ví dụ:
Bước 1: Mở Terminal
Bước 2: Gõ lệnh sau:
sort words -n numbers
Bước 3: Nhấn ENTER. Lệnh sort sẽ xem nội dung của tất cả các file như một khối và sắp xếp laik các file.
Ví dụ 8: Sắp xếp một cột bằng lệnh sort trong Linux
Lệnh sort trong Linux còn sắp xếp theo cột và hiển thị thông tin về các file hoặc directory, trong đó cột thứ 4 hiển thị kích thước file. Bây giờ, chúng ta sẽ sắp xếp cột này theo thứ tự tăng dần bằng tùy chọn -k. Hãy cùng làm theo 3 bước sau:
Bước 1: Mở Terminal trong Ubuntu.
Bước 2: Gõ lệnh sau vào dấu nhắc lệnh:
ls -l | sort -nk5
Bước 3: Nhấn phím ENTER. Kết quả là, các kích thước file sẽ được hiển thị theo thứ tự tăng dần.
Ví dụ 9: Sắp xếp và loại bỏ các từ trùng lặp bằng lệnh sort trong Linux
Trong ví dụ 4, bạn đã thấy có hai từ giống nhau và để loại bỏ, có thể sử dụng tùy chọn -u (viết tắt của từ “unique”). Cách làm này cũng được gọi là sắp xếp duy nhất. Trong ví dụ này, Vietnix sẽ sử dụng một file chứa các từ. Hãy làm theo 3 bước sau:
Bước 1: Mở Ubuntu Terminal.
Bước 2: Nhập lệnh sau vào dòng lệnh:
cat words
sort -u words
Bước 3: Nhấn phím ENTER. Ban đầu, bạn sẽ thấy có hai từ “today” trong FILE. Sau khi sắp xếp duy nhất, chỉ còn lại một từ “today”.
Ví dụ 10: Sắp xếp danh sách tháng theo thứ tự với lệnh sort
Để sắp xếp danh sách tháng theo thứ tự, bạn có thể sử dụng lệnh sort trên Linux. Lệnh này không phân biệt ngày hay năm, mà chỉ đơn giản sắp xếp tên các tháng theo thứ tự bảng chữ cái. Có 3 bước thực hiện:
Bước 1: Mở Terminal
Bước 2: Gõ lệnh:
cat months
sort months
sort -M months
Bước 3: Nhấn Enter. Kết quả sẽ là danh sách các tháng đã được sắp xếp theo thứ tự.
Ví dụ 11: Sắp xếp nội dung của một file và lưu kết quả vào một file mới
Bạn có thể chuyển kết quả của lệnh sort vào một file, nhưng lệnh sort trong Linux còn có một tính năng bổ sung. Bạn có thể lưu kết quả bằng cách làm theo 3 bước sau. Hãy sử dụng file numbers ở đây:
Bước 1: Mở ứng dụng Terminal trong Ubuntu.
Bước 2: Trong Terminal, nhập lệnh sau:
sort -o result_file numbers
cat result_file
Lưu ý: Bạn cần nhập tên của file đầu ra trước, sau đó mới đến file đầu vào.
Bước 3: Nhấn phím ENTER. Kết quả file “sorted_file” được dùng để lưu kết quả và lệnh cat trong Linux để xem nội dung của file đó.
Ví dụ 12: Kiểm tra xem file đã được sắp xếp hay chưa bằng lệnh sort trên Linux
Đôi khi khi viết tập lệnh, bạn cần kiểm tra xem một file đã được sắp xếp hay chưa. Có 3 bước dưới đây sẽ giúp bạn làm điều này một cách dễ dàng:
Bước 1: Mở Terminal của Ubuntu.
Bước 2: Gõ lệnh sau vào:
sort -c numbers2
sort -c numbers
Bước 3: Nhấn ENTER. Nếu file đã được sắp xếp, sẽ không có kết quả gì hiển thị. Ngược lại, nếu chưa được sắp xếp, bạn sẽ thấy thông báo tương tự như dòng thứ hai trong hình.
Ví dụ 13: Sắp xếp ngẫu nhiên bằng lệnh sort trên Linux
Đôi khi, bạn cần tạo ra kết quả ngẫu nhiên, lệnh sort trên Linux có thể giúp bạn làm điều đó. Hãy sử dụng file numbers từ “Ví dụ 11”. Làm theo 3 bước sau:
Bước 1: Mở Terminal của Ubuntu.
Bước 2: Nhập lệnh sau vào dòng lệnh:
sort -R numbers
Bước 3: Nhấn phím ENTER. Kết quả của bạn có thể giống hoặc khác với Vietnix. Mỗi lần thực hiện, bạn sẽ nhận được kết quả khác nhau.
Ví dụ 14: Kết hợp lệnh sort trong Linux và join
Join được dùng để nối các dòng của hai file với nhau. Để nối các file đã được sắp xếp, làm theo 3 bước sau:
Bước 1: Mở Terminal trong Ubuntu.
Bước 2: Gõ lệnh sau:
cat join <(sort words) <(sort -n numbers)
Bước 3: Nhấn phím ENTER. Kết quả sẽ cho thấy sự khác biệt giữa “sắp xếp nhiều file” và “nối các file đã sắp xếp”. Lệnh “join” chỉ đơn giản là nối kết quả của hai file khác nhau, không làm gì thêm.
Ví dụ 15: Sắp xếp dữ liệu theo dấu phân cách bằng lệnh sort trong Linux
Mặc định, lệnh sort trong Linux sẽ sắp xếp dữ liệu theo khoảng trắng. Tuy nhiên, bạn có thể tùy chỉnh dấu phân cách khác. Ví dụ, mình sẽ dùng một file CSV (data.csv) với dấu phẩy (,) là dấu phân cách. Có 3 bước thực hiện:
Bước 1: Mở Terminal trong Ubuntu.
Bước 2: Gõ lệnh sau:
cat data.csv
sort -t, -k3 data.csv
Bước 3: Nhấn ENTER. Dấu phẩy (,) sau tùy chọn -t là do bạn đang dùng dấu phẩy làm ký tự phân tách. -k3 nghĩa là muốn sắp xếp theo cột thứ 3 trong file.
Ví dụ 16: Sắp xếp theo trường bằng lệnh sort trong Linux
Nếu bạn muốn sắp xếp theo cột thứ hai (tuổi), kết quả có thể không như mong muốn vì lệnh sắp xếp sẽ dựa trên cả “Mr.” và “Ms.” ở đầu mỗi dòng. Để giải quyết vấn đề này, chúng ta cần chỉ định cụ thể trường mà lệnh sắp xếp sẽ sử dụng.
Có 3 bước thực hiện trên Ubuntu Terminal:
Bước 1: Mở Ubuntu Terminal.
Bước 2: Nhập lệnh sau:
sort -t, -k2.10,2.15 data.csv
Bước 3: Nhấn Enter. Kết quả lệnh sẽ nhìn vào cột thứ hai, bỏ qua 3 ký tự đầu, rồi dùng 2 ký tự tiếp theo để sắp xếp dữ liệu.
Lời kết
Qua bài viết này, chúng ta đã khám phá chi tiết về lệnh sort, một công cụ mạnh mẽ trong Linux giúp sắp xếp và quản lý dữ liệu hiệu quả. Hy vọng rằng những kiến thức này sẽ giúp bạn tận dụng tối đa lệnh sort và nâng cao khả năng làm việc với dữ liệu trong môi trường Linux