Có tiện ích Linux hoặc lệnh Bash nào mà tôi có thể sử dụng để sắp xếp chuỗi ký tự phân cách không gian?Sắp xếp các số phân cách bằng dấu cách với Linux/Bash
Trả lời
Dưới đây là một ví dụ đơn giản để giúp bạn đi:
echo "81 4 6 12 3 0" | tr " " "\n" | sort -g
tr
dịch các không gian phân chia ranh giới các con số, thành kí tự xuống dòng, bởi vì loại sử dụng kí tự xuống dòng như delimiters (tức là nó là để phân loại dòng của văn bản). Tùy chọn -g
cho biết sắp xếp sắp xếp theo "giá trị số chung".
man sort
để biết thêm chi tiết về sort
.
$ s=(one two three four)
$ sorted=$(printf "%s\n" ${s[@]}|sort)
$ echo $sorted
four one three two
Đây là một biến thể của câu trả lời ghostdog74 của đó là quá lớn để vừa trong một chú thích. Nó cho thấy chữ số thay vì tên của các số và cả chuỗi gốc và kết quả là trong các chuỗi được phân tách bằng dấu cách (thay vì một mảng trở thành một chuỗi được phân tách bằng dòng mới).
$ s="3 2 11 15 8"
$ sorted=$(echo $(printf "%s\n" $s | sort -n))
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2 3 8 11 15
Nếu bạn không sử dụng echo
khi thiết lập các giá trị của sorted
, sau đó chuỗi có dòng mới trong đó. Trong trường hợp đó lặp lại nó mà không có dấu ngoặc kép đặt tất cả trên một dòng, nhưng, như vang vọng nó với dấu ngoặc kép sẽ hiển thị, mỗi số sẽ xuất hiện trên dòng riêng của nó. Đây là trường hợp bản gốc là một mảng hay một chuỗi.
# demo
$ s="3 2 11 15 8"
$ sorted=$(printf "%s\n" $s | sort -n)
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2
3
8
11
15
Sử dụng mở rộng tham số Bash (để thay dấu cách bằng dòng mới), chúng tôi có thể làm:
str="3 2 11 15 8"
sort -n <<< "${str// /$'\n'}"
# alternative
NL=$'\n'
str="3 2 11 15 8"
sort -n <<< "${str// /${NL}}"
Nếu bạn thực sự có một chuỗi không gian được phân định các con số, sau đó một trong những câu trả lời khác được cung cấp sẽ làm việc khỏe. Nếu danh sách của bạn là mảng bash, thì:
oldIFS="$IFS"
IFS=$'\n'
array=($(sort -g <<< "${array[*]}"))
IFS="$oldIFS"
có thể là giải pháp tốt hơn. Dấu phân cách dòng mới sẽ giúp nếu bạn muốn khái quát hóa để sắp xếp một chuỗi các chuỗi thay vì các số.
danh sách của tôi là một mảng bash, nhưng điều này không làm việc cho tôi: 'packages =" $ (sắp xếp <<< $ {! Package2apk [@]}) "' – Jayen
$ awk 'BEGIN{split(ARGV[1], numbers);for(i in numbers) {print numbers[i]} }' \
"6 7 4 1 2 3" | sort -n
Mặc dù đoạn mã này có thể là giải pháp, [bao gồm giải thích] (// meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn.Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. – yivi
Cải thiện về Bash đẹp Evan Krall của "mảng loại" bằng cách giới hạn phạm vi của IFS cho một lệnh duy nhất:
printf "%q\n" "${IFS}"
array=(3 2 11 15 8)
array=($(IFS=$'\n' sort -n <<< "${array[*]}"))
echo "${array[@]}"
printf "%q\n" "${IFS}"
Đây là một biến thể từ @JamesMorris câu trả lời:
echo "81 4 6 12 3 0" | xargs -n1 | sort -g | xargs
Thay vì tr
, tôi sử dụng xargs -n1
để chuyển đổi sang dòng mới. Cuối cùng xargs
là để chuyển đổi trở lại, thành một dãy số cách nhau bằng dấu cách.
- 1. Cách sắp xếp danh sách bằng số?
- 2. cách sắp xếp chuỗi theo javascript số
- 3. Cách tốt nhất để sắp xếp danh sách với các tham số sắp xếp tùy chỉnh bằng Python là gì?
- 4. Cách sắp xếp theo số đếm bằng postgresql?
- 5. phân loại với nhiều phím bằng lệnh sắp xếp Linux
- 6. cách sắp xếp hợp nhất nhanh hơn so với các câu đố sắp xếp chèn tôi
- 7. Sắp xếp mảng với dấu thời gian?
- 8. Bàn phím số với dấu phân cách thập phân
- 9. Sắp xếp các chuỗi chứa các số theo cách thân thiện với người dùng
- 10. Sắp xếp nhiều khóa với Unix sắp xếp
- 11. Sắp xếp các file bằng số trong bash
- 12. Cách sắp xếp các cột số và chữ trong Vim
- 13. Sắp xếp các nhóm khác nhau bằng cách sử dụng các thứ tự sắp xếp khác nhau trong solr
- 14. Cách sắp xếp các mục danh sách bằng cách sử dụng thứ tự sắp xếp tùy chỉnh trong jQuery
- 15. Làm thế nào để sắp xếp số trong javascript cách sắp xếp
- 16. Làm cách nào để sắp xếp một chuỗi các chuỗi?
- 17. Sắp xếp tệp phân cách tab dựa trên lệnh sắp xếp cột bash
- 18. Cách sắp xếp/sắp xếp bảng phụ thuộc 2D
- 19. Cách sắp xếp/sắp xếp dữ liệu trong Riak?
- 20. Cách sắp xếp lại các phiên TMUX?
- 21. Phân loại Javascript để khớp với SQL Server sắp xếp
- 22. Sắp xếp lại dấu thời gian bằng regex Perl
- 23. Nodes Sắp xếp XML bằng cách Alpha.Numeric sử dụng C#
- 24. Sắp xếp một mảng các số nguyên với Generics (Java)
- 25. Cách sắp xếp số bằng các giá trị chuỗi trong Kendo-Grid
- 26. cách sắp xếp ObservableCollection
- 27. Sắp xếp theo khoảng cách
- 28. Sắp xếp bằng MongoEngine?
- 29. Cách sắp xếp nhãn theo cách flowlayout?
- 30. TreeMap cách sắp xếp
Tôi nối thêm một '| tr' với các tham số đảo ngược để có được một chuỗi phân cách không gian trở lại. – isuldor
Để đảo ngược sắp xếp, sử dụng '-r'. – Tim