Tôi đang sử dụng sắp xếp unix để sắp xếp một tệp được phân tách bằng dấu phẩy với nhiều cột. Cho đến nay, điều này đã làm việc hoàn hảo để sắp xếp dữ liệu theo số hoặc theo thứ tự bảng chữ cái:
Ví dụ tập tin trước khi sắp xếp:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
Sắp xếp tệp: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Kết quả được sắp xếp:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
Đây là vấn đề: Tôi muốn sắp xếp cột 2 dựa trên một loại tùy chỉnh, nghĩa là tôi muốn Hoa Kỳ trước, sau đó là Canada, sau đó là Bahamas:
Sắp xếp mong muốn:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
Có cách nào để vượt qua unix sắp xếp thứ tự tùy chỉnh mà sau đó nó có thể áp dụng không? Cái gì đó như:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Cảm ơn!
t
thay vì f
trong dòng cuối cùng?
join
lệnh, nhưng bạn có thể sắp xếp rất nhiều thứ - các tệp đầu vàojoin
phải được sắp xếp theo một thứ tự, và sau đó bạn sẽ sử dụngsort
lại để đưa dữ liệu vào một thứ tự khác (và mất cột thứ tự sắp xếp như một bước sau sắp xếp).