2010-03-03 55 views
11

Tôi muốn sắp xếp các ký tự trong một chuỗi.Cách sắp xếp các ký tự trong một chuỗi?

Ví dụ:

echo cba | sort-command 
abc 

Có một câu lệnh này sẽ cho phép tôi làm điều này hoặc tôi sẽ phải viết một kịch bản awk để lặp qua chuỗi và sắp xếp nó?

Trả lời

5

Đây là gian lận (vì nó sử dụng Perl), nhưng hoạt động. :-P

echo cba | perl -pe 'chomp; $_ = join "", sort split //' 
+1

hay Ruby;) 'vang cba | ruby -e 'đặt ARGF.read.split (% r {\ s *}). sort.join'' –

6

Hãy tìm ra phương pháp hữu ích sau đây:

Shell

Sắp xếp chuỗi dựa trên nhân vật của mình:

echo cba | grep -o . | sort | tr -d "\n" 

Chuỗi tách bằng dấu cách:

echo 'dd aa cc bb' | tr " " "\n" | sort | tr "\n" " " 

Perl

print (join “”, sort split //,$_) 

của Ruby

ruby -e 'puts "dd aa cc bb".split(/\s+/).sort' 

Bash

Với bash bạn phải liệt kê từng ký tự từ một chuỗi, trong một cái gì đó chung chung như:

str="dd aa cc bb"; 
for ((i = 0; i < ${#str[@]}; i++)); do echo “${str[$i]}”; done 

Để sắp xếp mảng, vui lòng kiểm tra: How to sort an array in bash?

1

Một perl một liner

$ echo cba | perl -F -lane 'print sort @F' 
abc 

$ # for reverse order 
$ echo xyz | perl -F -lane 'print reverse sort @F' 
zyx 
$ # or 
$ echo xyz | perl -F -lane 'print sort {$b cmp $a} @F' 
zyx 
  • này sẽ thêm xuống dòng để đầu ra là tốt, lịch sự -l tùy chọn
  • Các đầu vào về cơ bản là phân chia nhân vật khôn ngoan và được lưu trong @F mảng
  • Sau đó sắp xếp @F được in


này cũng sẽ làm việc dòng khôn ngoan cho cho tập tin đầu vào

$ cat ip.txt 
idea 
cold 
spare 
umbrella 

$ perl -F -lane 'print sort @F' ip.txt 
adei 
cdlo 
aeprs 
abellmru 
Các vấn đề liên quan