2012-03-01 93 views
9

Tôi có một mảngsắp xếp trong shell script

arr=(x11 y12 x21 y22 x31 y32) 

tôi cần phải sắp xếp mảng này để

x11 x21 x31 y12 y22 y32 

Vì vậy, tôi cần phải sắp xếp cả chữ cái và số khôn ngoan

Làm thế nào để thực hiện điều này trong kịch bản lệnh shell?

Nếu tôi sử dụng [ $i -le $j ], nó sẽ hiển thị "biểu thức số nguyên mong đợi".

Và các chuỗi cũng có thể chứa các ký tự khác: x.1.1 hoặc 1.x.1.

Làm cách nào để thực hiện việc này?

+0

Bạn đã thử 'sắp xếp' chưa? – l0b0

+0

u có thể cho tôi cú pháp hoàn chỉnh, tôi là người mới bắt đầu – user691197

+0

Bản sao có thể có của [Cách sắp xếp một mảng trong BASH] (http://stackoverflow.com/questions/7442417/how-to-sort-an-array- in-bash) –

Trả lời

18

Đầu tiên chia phần tử mảng vào dòng (nhất * chương trình nix chỉ làm việc với dòng):

for el in "${arr[@]}" 
do 
    echo "$el" 
done 

Sau đó sắp xếp các dòng:

for el in "${arr[@]}" 
do 
    echo "$el" 
done | sort 

Bây giờ bạn có thể gán đến một mảng một lần nữa :

arr2=($(
    for el in "${arr[@]}" 
    do 
     echo "$el" 
    done | sort)) 

Bingo:

$ echo "${arr2[@]}" 
x11 x21 x31 y12 y22 y32 

Để hiểu cách thức hoạt động tất cả điều này, và làm thế nào để thay đổi nó nếu nó không làm chính xác những gì bạn muốn, có một cái nhìn tại man trang:

man bash 
man sort 

Xem thêm How to sort an array in BASH.

+0

Cảm ơn nó đã hoạt động! – user691197

+0

Bạn có thể cho tôi cú pháp giống nhau cho trình bao c không. Nó nói "Thiếu -" khi chạy qua cshell. – user691197

+0

Bạn nên chỉ định rằng trong các thẻ hoặc câu hỏi. Tôi không biết CSH. – l0b0

Các vấn đề liên quan