2011-09-14 25 views
30

Tôi có tệp csv với 7 trường dữ liệu. Tôi muốn sắp xếp trường thứ 7 theo thứ tự số ngược lại (giá trị nhỏ nhất trước tiên). Lĩnh vực thứ 7 của dữ liệu trông như thế này:Sắp xếp UNIX với giá trị số mũ?

0.498469643137 
1 
6.98112003175e-10 
9.11278069581e-06 

Tôi đã thử sử dụng công cụ loại UNIX như thế này:

$ sort -t"," -n -k -r 7 <my_file> 

Vấn đề tôi đang gặp là loại không nhận dạng lũy ​​thừa. Ví dụ: phân loại nghĩ rằng 6.98112003175e-10 lớn hơn 1. Làm thế nào tôi có thể sử dụng sắp xếp để sắp xếp cột csv, nhưng nhận ra ký pháp khoa học? Xin được cảm ơn trước về sự giúp đỡ.

+4

Hãy thử 'cờ -g'. –

Trả lời

50

sắp xếp với tùy chọn '-g' sẽ thực hiện thủ thuật cho bạn. tùy chọn -g chỉ 'sử dụng giá trị số chung' để phân loại

+0

Cảm ơn, tôi đã đọc trang của người đàn ông, nhưng tôi không thấy gì về lá cờ -g. Điều này đã làm chính xác những gì tôi đang tìm kiếm. – drbunsen

5

Xin lưu ý, đó là miền địa phương của bạn có thể giả định delimiter khác: Ví dụ, trong nội địa hóa Nga ',' nhân vật delimits phần của số chứ không phải là '.'. Trong trường hợp này, bạn nên tính đến biến LANG.

Trong trường hợp của tôi LANG được đặt thành ru_RU.KOI8-R và do đó sort -g đã cho tôi kết quả sai.

+1

Tôi cũng gặp vấn đề này. Ở đây tôi tìm thấy một giải pháp https://askubuntu.com/questions/724338/how-to-set-lc-numeric-to-english-permanently – psmith

0

Vì vậy - chỉ để đưa ra ví dụ cho những người không biết cách sử dụng: thay vì "-n" bạn sử dụng "-g". l = 1,0.3,6.01e-10

sort -t$',' -n example.txt

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1

+0

Bạn có thể xây dựng? – Kmeixner

+0

như thế nào? -g là cho 'sử dụng giá trị số chung'. Vui lòng đọc bài viết trên về lý do sử dụng -g. Nếu bạn vẫn còn thắc mắc, tôi chắc chắn sẽ cố gắng trả lời chúng! – amc