Hướng dẫn sử dụng câu lệnh sort để xử lí text trên Linux

Chia sẻ

Là một công cụ quen thuộc trong tay sysadmin, công cụ sort giúp chúng ta dễ dàng sắp xếp các dữ liệu dạng text theo nhiều cách mà không làm thay đổi files gốc
Công cụ sort được sử dụng trong Linux để in output ra theo một thứ tự định trước. Câu lệnh này xử lí dữ liệu của chúng ta và sắp xếp chúng theo một cách định trước giúp chúng ta đọc thông tin hiệu quả hơn. Điều này hữu ích khi cần xử lí một lượng lớn dữ liệu và cần phải sắp xếp tăng/giảm theo bảng chữ cái hoặc số
Khi sắp xếp theo bảng chữ cái, câu lệnh sẽ kiểm tra thứ tự đầu tiên của mỗi dòng và sắp xếp chúng theo đúng thứ tự
Khi sắp xếp theo số, câu lệnh kiểm tra số ở mỗi dòng và sắp xếp các dòng theo thứ tự tăng hoặc giảm theo ý muốn của chúng ta
Tóm lại, sort là một câu lệnh hữu ích khi bạn cần đọc một file rất lớn hoặc danh sách chưa được sắp xếp đúng cách khiến bạn tốn nhiều thời gian để đọc chúng. Để xử lí vấn đề này, chúng ta sử dụng câu lệnh sort để sắp xếp nội dung của files hoặc danh ssch. Câu lệnh sort xử lí data dưới định dạng ASCII. Có một số tuỳ chọn hữu ích cho câu lệnh sort có nhằm thay đổi hành động của câu lệnh. Một số ví dụ được trình bày dưới đây, đồng thời với cú pháp của câu lệnh này

Cú pháp câu lệnh

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

Ví dụ

Ở ví dụ đầu tiên, chúng ta sử dụng câu lệnh sort mà không có tuỳ chọn đi kèm. Nó sẽ sắp xếp các dòng theo bảng chữ cái bằng cách sắp xếp chữ cái đầu tiên của mỗi dòng. Lưu ý, với cùng một chữ cái thì dòng bắt đầu bằng chữ thường sẽ xếp trên những dòng bắt đầu bằng chữ hoa

cat test.txt
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Budhha
ChatrapatiShahuMaharaj
budhha
Ramaai
sort test.txt
budhha
Budhha
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Ramaai

Để đảo chiều sắp xếp các bạn thêm tham số -r

sort -r test.txt
Ramaai
MahatmaJyotibaPhule
Dr.B.R.Ambedkar
ChatrapatiShahuMaharaj
Budhha
budhha

Để sắp xếp theo chữ số các bạn dùng tham số -n

cat numeric.txt
14
04
34
1891
938
378
2356
sort -n numeric.txt
04
14
34
378
938
1891
2356
sort -nr numeric.txt
2356
1891
938
378
34
14
04

Bạn có thể sắp xếp theo cột nếu file có nhiều cột. Sử dụng tham số -k kèm với số cột trong files, lưu ý ở dưới đây, nếu chúng tôi chỉ dùng tham số -k thì nó sẽ sắp xếp cột 2 dựa theo chữ số đều tiên của cột chứ không phải giá trị của toàn bộ số trong cột, nếu bạn muốn làm điều này thì bạn thêm tham số -n vào nữa nhé

cat file2.txt
Advika 1
Amit 30
Ajit 28
Abhi 278
Chirag 2
sort -k 2 file2.txt
Advika 1
Chirag 2
Abhi 278
Ajit 28
Amit 30

Một ví dụ rõ hơn kết hợp với tham số -nk

ls -l
total 0
-rw-r--r-- 1 amwaghma hpcapp 42 Aug 20 19:30 file2.txt
-rw-r--r-- 1 amwaghma hpcapp 31 Aug 20 19:51 months.txt
-rw-r--r-- 1 amwaghma hpcapp 27 Aug 20 19:20 numeric.txt
-rw-r--r-- 1 amwaghma hpcapp 73 Aug 20 19:49 test.txt
ls -l | sort -nk 5
total 0
-rw-r--r-- 1 amwaghma hpcapp 27 Aug 20 19:20 numeric.txt
-rw-r--r-- 1 amwaghma hpcapp 31 Aug 20 19:51 months.txt
-rw-r--r-- 1 amwaghma hpcapp 42 Aug 20 19:30 file2.txt
-rw-r--r-- 1 amwaghma hpcapp 73 Aug 20 19:49 test.txt

Ngoài ra bạn có thể thêm tham số -u để xoá bỏ các dòng bị lặp lại

cat test.txt
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
budhha
Ramaai
Dr.B.R.Ambedkar
sort test.txt
budhha
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Ramaai
sort -u test.txt
budhha
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Ramaai

Một tuỳ chọn thú vị là bạn có thể kiểm tra file này được sắp xếp hay chưa, bằng cách sử dụng tham số -c. Nếu dòng đó đã được sắp xếp rồi thì bạn sẽ không nhận được output gì hết, sort sẽ check dòng tiếp theo nếu nó chưa được sắp thì sẽ in ra thông báo cho bạn. Chẳng hạn như trong ví dụ dưới đây

cat test.txt
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
ChatrapatiShahuMaharaj
budhha
Ramaai
sort test.txt
budhha
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Ramaai
sort -c test.txt
sort: test.txt:3: disorder: ChatrapatiShahuMaharaj

Bạn còn có thể sắp xếp các tháng trong files với tham số -M

cat months.txt
February
December
January
July
sort -M months.txt
January
February
July
December
sort -Mr months.txt
December
July
February
January

Bạn cũng có thể cho sort nhiều files một lúc với tham số -n

cat test.txt numeric.txt
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
ChatrapatiShahuMaharaj
budhha
Ramaai
14
04
34
1891
938
378
2356
sort test.txt -n numeric.txt
budhha
ChatrapatiShahuMaharaj
Dr.B.R.Ambedkar
MahatmaJyotibaPhule
Ramaai
04
14
34
378
938
1891
2356

Bạn cũng có thể lưu lại kết quả dùng một trong những cách dưới đây

sort test.txt > sortfile
sort -o sortfile test.txt

 

Chia sẻ