Как отсортировать символы в строке? - PullRequest
18 голосов
/ 03 марта 2010

Я хочу отсортировать символы в строке.

* 1003 Е.Г. *

echo cba | sort-command
abc

Есть ли команда, которая позволит мне это сделать, или мне придется написать awk скрипт для перебора строки и ее сортировки?

Ответы [ 4 ]

35 голосов
/ 04 марта 2010
echo cba | grep -o . | sort |tr -d "\n"
10 голосов
/ 04 февраля 2015

Пожалуйста, найдите следующие полезные методы:

Shell

Сортировка строки по символам:

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

Строка, разделенная пробелами:

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

Perl

print (join "", sort split //,$_)

рубин

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

Bash

В bash вы должны перечислять каждый символ из строки, как правило, что-то вроде:

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

Для сортировки массива, пожалуйста, проверьте: Как отсортировать массив в bash ?

6 голосов
/ 03 марта 2010

Это обман (потому что он использует Perl), но работает. : -Р

echo cba | perl -pe 'chomp; $_ = join "", sort split //'
4 голосов
/ 19 апреля 2017

Другой perl однострочный

$ 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
  • Это также добавит новую строку в вывод, вежливость -l опция
  • Ввод в основном разбивается на символы и сохраняется в @F массиве
  • Затем сортируется @F и печатается


Это также будет работать в строке для данного входного файла

$ cat ip.txt 
idea
cold
spare
umbrella

$ perl -F -lane 'print sort @F' ip.txt 
adei
cdlo
aeprs
abellmru
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...