LinuxForum.Fans
Тема

Сортировать слова в строке

Автор: fragment 13 сообщений 4185 просмотров
#384023

Команда sort почему-то работает только если слова находятся каждое в новой строке (т.е. в столбец), а как отсортировать слова, расположенные в одной строке через пробел?

Ну или подскажите, как превратить такую строку в столбец, не прибегая к echo в файл?

#384028
"fragment" написал:
Ну или подскажите, как превратить такую строку в столбец, не прибегая к echo в файл?

Примерно так

[console]~/ echo "qwer abc 3 wert zxy" | sed 's/\ /\n/g' | sort
3
abc
qwer
wert
zxy[/console]

#384029

Да, уже нашёл, но это не подходит. Надо всё же отсортировать слова в строке.

#384031

Вот, «накостылил» :-X
[console]/tmp/ cat test.txt
qwer abc 3 wert zxy
/tmp/ sed 's/\ /\n/g' test.txt | sort | sed ':a; /$/N; s/\n/\ /; ta' > new.txt
/tmp/ cat new.txt
3 abc qwer wert zxy[/console]

#384032

Ну сделай из них снова строку, например

text
a=`echo "qwer abc 3 wert zxy" | sed 's/\ /\n/g' | sort`
for k in $a
do
    echo -n "$k "
done
#384033

Lupo Alberto, в том и дело, что хотелось бы обойтись без помощи промежуточных файлов, всё чисто в переменных.

#384034
text
/tmp/ cat test.txt                                           
qwer abc 3 wert zxy
/tmp/ sed 's/\ /\n/g' test.txt | sort | tr '\n' ' ' > new_1.txt
/tmp/ cat new_1.txt
3 abc qwer wert zxy
#384035

Мой пример чисто в переменных.

#384036

Vascom, спасибо, то, что надо.

#384044

Неужели трудно?

text
echo "asd 123 rewt 567 897 hgd " | sed 's/\ /\n/g' | sort | tr '\n' ' '
 123 567 897 asd hgd rewt 
#384045

Да, так эстетичнее.

#384052
text
 echo "qwer abc 3 wert zxy" | xargs -n1 | sort | xargs
text
python -c "print(' '.join(sorted('qwer abc 3 wert zxy'.split())))"
#384053
"-=Serj=-" написал:
text
 echo "qwer abc 3 wert zxy" | xargs -n1 | sort | xargs

Так ещё эстетичнее.

Войдите или зарегистрируйтесь, чтобы ответить.