Sắp xếp tệp có số nguyên trong ngoặc đơn không có khoảng trắng


8

Tôi đang cố gắng sắp xếp một tệp như thế này (đó là danh sách các tên chương trình con)

cfn=(1370) __lib_file_MOD_file_open
fn=(1368) __universe_MOD_general_boot
fn=(916) __universe_MOD_general_main
fn=(6142) __grid_var_MOD_get_overlap
...

theo số nguyên bên trong dấu ngoặc đơn. Lần đầu tiên tôi đã thử lệnh sort

sort -t '=' -k 2 routine_list.txt

nhưng sau đó fn = (916) xuất hiện ở phần cuối của thông số.

fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap
...
fn=(916) __universe_MOD_general_main

nhưng tôi muốn các số được sắp xếp theo thứ tự tăng dần (916 -> 1368 -> 1370 -> ...) Có thể thực hiện việc này tương đối đơn giản bằng cách sử dụng một số lệnh hoặc tùy chọn không?


... có liên quan gì không?
mikeerv

@mikeerv char yêu thích của tôi -> hát hướng dương -> mặt trời -> quang phổ :)
roygvib 12/07/2015

Câu trả lời:


8

Làm thế nào về:

sort -nt'(' -k2 file.txt

Kiểm tra :

$ sort -nt'(' -k2 file.txt 
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap
  • -n cho biết chúng tôi đang sắp xếp số

  • t'(' đặt dấu phân cách là (

  • -k2đặt khóa thành sorttrường thứ hai tức là bắt đầu từ các chữ số đến cuối dòng.


oooooh đính kèm -n hoạt động ... Tôi đã đọc trang người đàn ông và đã thử -n trước đó, nhưng nó không hoạt động vào thời điểm đó ... nhưng bây giờ sự kết hợp ở trên hoạt động hoàn hảo. Cảm ơn rất nhiều :)
roygvib 11/07/2015

@roygvib tôi sẽ đề nghị bạn sử dụng (làm dấu phân cách thay vì =nếu bạn sử dụng (thì việc sắp xếp có thể bắt đầu bằng số từ điểm bắt đầu của trường thứ hai ..
heemayl 11/07/2015

Có, tốt hơn là nên sử dụng '(' than '='. Tôi nhớ rằng tôi đã thử sử dụng cả hai '(' và ')' làm dấu phân cách đồng thời nhưng không thành công và đã từ bỏ sử dụng dấu ngoặc đơn tại thời điểm đó ...
roygvib

5

Thử cái này. Đặt dấu phân cách thành =, rồi sử dụng trường 2 từ ký tự 2 trở đi (bỏ qua dấu "(").

sort -t= -k 2.2n file.txt
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap

Hoặc thậm chí

sort -t\( -k 2n <foo
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap

1
hmm .. điều này cũng hoạt động như mong đợi Thật tuyệt khi biết rằng một số nhân vật có thể được bỏ qua. Cảm ơn rất nhiều :)
roygvib 11/07/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.