14 ví dụ hữu ích về lệnh sort trong Linux – Phần 1

Câu lệnh sort là một chương trình Linux được sử dụng để in các dòng trong các tệp văn bản đầu vào và kết hợp tất cả các tệp thành trình tự đã được sắp xếp. Lệnh sort sử dụng dấu cách trống như là bộ phân cách trường và tệp đầu vào hoàn toàn là khóa sắp xếp. Quan trọng để nhận thấy rằng lệnh sort thực sự không sắp xếp các tệp mà chỉ in ra đầu ra đã được sắp xếp cho đến khi bạn chuyển hướng đầu ra.

Bài viết này mục tiêu một cái nhìn sâu sắc vào lệnh ‘sort‘ trong Linux với 14 ví dụ thực tế hữu ích cho thấy cách sử dụng lệnh sort trong Linux.

1. Tạo một tệp văn bản có nội dung được chỉ định

Đầu tiên, chúng ta sẽ tạo một tệp văn bản, có tên là ‘tecmint.txt‘, sẽ được sử dụng để thực hiện các ví dụ lệnh ‘sort‘ tại thư mục làm việc của chúng ta là ‘/home/$USER/Desktop/tecmint‘ cho tác vụ này.

Tùy chọn ‘-e‘ trong lệnh dưới đây cho phép hiểu backslash và /n cho lệnh echo để viết mỗi chuỗi vào một dòng mới.

echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt

2. Xem nội dung tệp

Trước khi chúng ta bắt đầu với lệnh ‘sort‘, hãy xem nội dung của tệp và cách nó xuất hiện bằng cách sử dụng lệnh cat sau đây.

cat tecmint.txt

3. Sắp xếp nội dung tệp

Lệnh “sort tecmint.txt” được sử dụng để sắp xếp lại các dòng trong tệp theo thứ tự abc tăng dần, nếu có các dòng trùng lặp, nó sẽ giữ một bản sao của mỗi dòng duy nhất.

sort tecmint.txt
Lưu ý: Câu lệnh trên không sắp xếp nội dung của tệp văn bản nhưng chỉ hiển thị đầu ra đã được sắp xếp trên giao diện điều khiển.

4. Chuyển hướng đầu ra đã sắp xếp sang tệp mới

Lệnh sau được sử dụng để sắp xếp các dòng trong tệp văn bản “tecmint.txt“ theo thứ tự abc tăng dần và sau đó chuyển hướng đầu ra đã được sắp xếp vào một tệp mới có tên là “sorted.txt“, điều này có nghĩa là tệp gốc không thay đổi và nội dung đã được sắp xếp được lưu trữ trong một tệp riêng biệt.

Để kiểm tra nội dung, sử dụng lệnh cat.

sort tecmint.txt > sorted.txt
cat sorted.txt

5. Sắp xếp nội dung file theo thứ tự ngược lại

Lệnh sau được sử dụng để sắp xếp các dòng trong tệp văn bản “tecmint.txt” theo thứ tự ngược, điều này có nghĩa sẽ sắp xếp các dòng theo thứ tự abc giảm dần và đầu ra đã được sắp xếp sau đó được chuyển hướng đến một tệp mới có tên là “reversesorted.txt

sort -r tecmint.txt > reversesorted.txt
cat reversesorted.txt

6. Lưu danh sách tập tin và thư mục

Lệnh sau được sử dụng để liệt kê nội dung của thư mục home của người dùng (“/home/$USER“) dưới dạng xem chi tiết, định dạng dài bằng cách sử dụng lệnh ls và sau đó nó chuyển hướng danh sách thư mục này vào một tệp văn bản có tên là “lsl.txt” nằm trên màn hình desktop của người dùng, cụ thể là trong thư mục “tecmint“.

ls -l /home/$USER > /home/$USER/Desktop/tecmint/lsl.txt
cat lsl.txt

Bây giờ, chúng ta sẽ khám phá ví dụ về việc sắp xếp nội dung dựa trên những trường khác ngoài các ký tự ban đầu mặc định.

7. Sắp xếp nội dung tệp dựa trên trường thứ hai

Lệnh sau được sử dụng để sắp xếp nội dung của tệp “lsl.txt“ dựa trên các giá trị trong trường thứ hai của mỗi dòng. Tùy chọn ‘-n‘ chỉ định một sắp xếp số, xem trường thứ hai là số chứ không phải là văn bản.

Tùy chọn ‘-k2’ chỉ định rằng chúng ta muốn sắp xếp dựa trên trường thứ hai. Bằng cách thực hiện lệnh này, bạn sẽ có được một danh sách các dòng đã được sắp xếp trong “lsl.txt“, với tiêu chí sắp xếp là các giá trị số trong trường thứ hai của mỗi dòng.

sort -nk2 lsl.txt

8. Sắp xếp nội dung tệp dựa trên trường thứ chín

Lệnh sau được sử dụng để sắp xếp các dòng trong tệp “lsl.txt“ dựa trên các giá trị trong trường thứ chín của mỗi dòng theo thứ tự abc tăng dần. Tùy chọn ‘-k9’ chỉ định rằng sắp xếp sẽ được thực hiện dựa trên trường thứ chín.

sort -k9 lsl.txt

9. Sắp xếp tệp theo kích thước tệp

Lệnh sau kết hợp lệnh “ls‘ và ‘sort‘ để liệt kê nội dung của thư mục home của người dùng dưới dạng định dạng chi tiết dài, sau đó nó chuyển tiếp danh sách thư mục sang 'sort -nk5', sắp xếp danh sách dựa trên các giá trị trong cột thứ năm, đại diện cho kích thước tệp tin.

ls -l /home/$USER | sort -nk5

10. Loại bỏ các dòng trùng lặp trong tệp

Lệnh sau sắp xếp các dòng trong tệp “tecmint.txt“ theo thứ tự abc tăng dần và loại bỏ bất kỳ dòng trùng lặp nào bằng cách sử dụng tùy chọn ‘-u‘, tùy chọn này đảm bảo các dòng duy nhất được giữ lại trong đầu ra đã được sắp xếp.

$ cat tecmint.txt
$ sort -u tecmint.txt

Quy tắc cho đến nay (những gì chúng ta đã quan sát):

  • Các dòng bắt đầu bằng số được ưu tiên trong danh sách và nằm ở trên cùng cho đến khi có khác (tùy chọn – -r).
  • Các dòng bắt đầu bằng chữ thường được ưu tiên trong danh sách và nằm ở trên cùng cho đến khi có khác (tùy chọn – -r).
  • Nội dung được liệt kê dựa trên sự xuất hiện của bảng chữ cái trong từ điển cho đến khi khác (tùy chọn – -r).
  • Sort mặc định mỗi dòng là một chuỗi và sau đó sắp xếp nó tùy thuộc vào sự xuất hiện của bảng chữ cái trong từ điển (Ưu tiên số; xem quy tắc – 1) cho đến khi có khác.

11. Chuyển hướng danh sách thư mục sang tập tin

Lệnh sau liệt kê nội dung của thư mục home của người dùng bằng định dạng dài, bao gồm các tệp và thư mục ẩn sau đó chuyển hướng danh sách thư mục vào một tệp văn bản có tên là “lsla.txt“ nằm trên màn hình desktop của người dùng trong thư mục “tecmint“.

ls -lA /home/$USER > /home/$USER/Desktop/tecmint/lsla.txt
cat lsla.txt

Những ai quen thuộc với lệnh ls hiểu rằng  'ls -lA' tương đương với 'ls -l' cộng với các tệp ẩn. Kết quả là hầu hết nội dung của hai lệnh này sẽ giống nhau.

12. Sắp xếp nội dung tập tin

Lệnh sau sắp xếp nội dung của hai tệp văn bản ‘lsl.txt‘ và ‘lsla.txt‘ theo thứ tự abc tăng dần và sau đó kết hợp và hiển thị nội dung đã được sắp xếp trên giao diện điều khiển.

$ sort lsl.txt lsla.txt

Lưu ý sự lặp lại của các tệp và thư mục.

13. Loại bỏ các dòng trùng lặp trong tệp

Lệnh sau kết hợp và sắp xếp nội dung của hai tệp văn bản ‘lsl.txt‘ và ‘lsla.txt‘ theo thứ tự abc tăng dần trong khi loại bỏ bất kỳ dòng trùng lặp nào bằng cách sử dụng tùy chọn ‘-u‘, tùy chọn này đảm bảo rằng các dòng duy nhất được giữ lại trong đầu ra đã được sắp xếp.

$ sort -u lsl.txt lsla.txt

Lưu ý rằng các bản sao đã bị bỏ qua trong kết quả. Ngoài ra, bạn có thể lưu đầu ra vào một tệp mới bằng cách chuyển hướng nó.

14. Sắp xếp đầu ra theo nhiều trường bằng dấu phân cách tùy chỉnh

Lệnh sau kết hợp lệnh ‘ls‘ và ‘sort‘ để liệt kê nội dung của thư mục home của người dùng dưới dạng định dạng dài và sau đó chuyển tiếp danh sách thư mục vào lệnh ‘sort‘, làm xắp xếp đầu ra dựa trên các cột và trường cụ thể.

ls -l /home/$USER | sort -t "," -nk2,5 -k9

Đây là phân tích của lệnh:

  • -t "," – xác định rằng dấu phẩy (",") được sử dụng làm bộ phân cách trường.
  • -nk2,5 – cho biết sắp xếp theo giá trị số trong các cột từ 2 đến 5, các cột này thường đại diện cho quyền và chi tiết sở hữu.
  • -k9 – tiếp tục sắp xếp kết quả dựa trên cột thứ chín, đại diện cho kích thước tệp tin.

Đó là tất cả cho bây giờ. Trong bài viết tiếp theo, chúng ta sẽ xem xét các ví dụ chi tiết hơn về lệnh sort cho bạn.