Bài viết này giới thiệu các bạn về cách dùng lệnh sort trên hệ điều hành Linux.
1. Lệnh sort
Lệnh sort
được sử dụng để sắp xếp các dòng của tệp văn bản theo thứ tự tăng dần hoặc giảm dần, theo một khoá sắp xếp. Khóa sắp xếp mặc định là thứ tự của các ký tự ASCII (theo thứ tự bảng chữ cái). Cú pháp của lệnh sort
:
sort <tuỳ chọn> <file>
Để xem các tùy chọn của lệnh sort
ta dùng lệnh: man sort
.
2. Các ví dụ về lệnh sort
Ví dụ 1: Sắp xếp mặc định:
[root@test1 ~]# cat file.txt
Tinh mo em thuc day
Rua mat roi den truong
Em buoc voi tren duong
Nui dang hang truoc mat
[root@test1 ~]# sort file.txt
Em buoc voi tren duong
Nui dang hang truoc mat
Rua mat roi den truong
Tinh mo em thuc day
Ví dụ trên các dòng được sắp xếp theo thứ tự a đến z(thứ tự tăng dần) dựa trên kí tự đầu tiên của mỗi dòng.
Ví dụ 2: Trích xuất tất cả các từ trong một file và sắp xếp chúng:
[root@test1 ~]# cat file.txt
Tinh mo em thuc day
Rua mat roi den truong
Em buoc voi tren duong
Nui dang hang truoc mat
[root@test1 ~]# grep -oi '[a-z]*' file.txt | sort
buoc
dang
day
den
duong
em
Em
hang
mat
mat
mo
Nui
roi
Rua
thuc
Tinh
tren
truoc
truong
voi
Ví dụ 3: Sắp xếp ngược có nghĩa là sắp xếp theo thứ tự z đến a(thứ tự giảm dần) bằng cách sử dụng tùy chọn -r
:
[root@test1 ~]# cat file1.txt
Cai trong truong em
Mua he cung nghi
Suot ba thang lien
Trong nam ngam nghi
[root@test1 ~]# sort -r file1.txt
Trong nam ngam nghi
Suot ba thang lien
Mua he cung nghi
Cai trong truong em
Ví dụ 4: Sử dụng tuỳ chọn -n
để sắp xếp số theo thứ tự các số từ bé đến lớn:
[root@test1 ~]# cat numbers.txt
100
25
88
35
11
[root@test1 ~]# sort -n numbers.txt
11
25
35
88
100
Ví dụ 5: Sử dụng tùy chọn -n
cùng với tuỳ chọn -r
để sắp xếp số theo thứ tự các số từ lớn đến bé:
[root@test1 ~]# cat numbers.txt
100
25
88
35
11
[root@test1 ~]# sort -nr numbers.txt
100
88
35
25
11
Ví dụ 6: Sắp xếp ngẫu nhiên sử dụng tuỳ chọn -R
:
[root@test1 ~]# cat numbers.txt
12
15
3
12
18
3
15
[root@test1 ~]# sort -R numbers.txt
12
12
18
15
15
3
3
Lưu ý: các dòng trùng lặp sẽ luôn luôn kết thúc cạnh nhau
Ví dụ 7: Sắp xếp rồi chỉ định tệp đầu ra bằng tùy chọn -o
:
[root@test1 ~]# cat numbers.txt
12
15
3
12
18
3
15
[root@test1 ~]# sort -R numbers.txt -o rand_numbers.txt
[root@test1 ~]# cat rand_numbers.txt
15
15
3
3
18
12
12
Ví dụ 8: Cú pháp <() cho phép đầu ra của lệnh được chuyển dưới dạng tệp đầu vào sang lệnh khác mà không cần phải tạo thủ công một tệp tạm thời
[root@test1 ~]# cat numbers.txt
100
25
88
35
11
[root@test1 ~]# sort -n numbers.txt <(echo '-4')
-4
11
25
35
88
100
[root@test1 ~]# sort -n numbers.txt <(echo '1,234')
11
25
35
88
100
1,234
[root@test1 ~]# sort -n numbers.txt <(echo '31.24')
11
25
31.24
35
88
100
Ví dụ 9: Sử dụng tùy chọn -g
nếu đầu vào có các tiền tố + hoặc kí hiệu E:
[root@test1 ~]# cat numbers.txt
110
-1.53
+120
3.14e+5
42.5e-4
[root@test1 ~]# sort -g numbers.txt
-1.53
42.5e-4
110
+120
3.14e+5
Ví dụ 10: Sắp xếp nhiều tên tệp được phân biệt bằng số:
[root@test1 ~]# cat file.txt
file0
file10
file3
file4
file8
[root@test1 ~]# sort -V file.txt
file0
file3
file4
file8
file10
Ví dụ 11: Sử dụng xử lý các số được báo cáo bằng thời gian:
[root@test1 ~]# cat time.txt
6m35.363s
4m20.058s
5m5.099s
5m1.130s
4m42.833s
5m33.083s
[root@test1 ~]# # assuming consistent min/sec format
[root@test1 ~]# sort -V time.txt
4m20.058s
4m42.833s
5m1.130s
5m5.099s
5m33.083s
6m35.363s
Ví dụ 12: Sắp xếp theo cột bằng cách sử dụng tùy chọn -k
. Theo mặc định dấu space, dấu tab, dấu 2 chấm dùng để phân tách các cột:
[root@test1 ~]# cat file.txt
abc 5
foo 1
peon 88
manager 34
[root@test1 ~]# sort -k2,2n file.txt
foo 1
abc 5
manager 34
peon 88