Сортировка полей inline

Я пытаюсь сортировать в строке ввода по неизвестному числу полей:

Входные данные:

ab bc bc ab cd ef bc bc cd ef cd bc ab ef ab bc cd gh 

Вывод:

 ab bc ab bc bc cd ef bc cd ef ab cb cd ab bc cd ef gh 

Я использовал что-то вроде awk '{if($2 < $1) print $2,$1;else print}' но похоже, что это будет беспорядочно для более чем двух полей. Любая помощь?

4 Solutions collect form web for “Сортировка полей inline”

Один из способов использования perl :

 perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile 

Вывод:

 ab bc ab bc bc cd ef bc cd ef ab bc cd ab bc cd ef gh 

Один способ использования GNU awk:

 awk '{ split($0, arr); asort(arr); for (i=1; i<=length(arr); i++) { printf "%s ", arr[i] }; printf RS } ' infile 

Вывод:

 ab bc ab bc bc cd ef bc cd ef ab bc cd ab bc cd ef gh 

В сценарии оболочки:

 while read n do echo $(echo $n | tr " " "\n" | sort ) done < infile 

(Это слишком много вилки, предпочитайте решение perl или gnu awk)

Вот еще одно решение perl , похожее на ответ @ Birei, но более краткий:

 $ perl -anle 'print "@{[sort @F]}"' file ab bc ab bc bc cd ef bc cd ef ab bc cd ab bc cd ef gh 
  • Как показать время процессора для процессов через вершину без «корневых» процессов
  • чтение записей из нескольких файлов
  • как извлечь номер из строки в unix
  • Разделить текстовый файл на строки с фиксированным числом слов
  • От файла gpx до csv
  • Sed, Awk Multiline log file, число {0-999] идентифицирует отношение
  • Как использовать awk для разбиения файла с помощью текстового шаблона
  • изменить формат даты и сохранить в переменной с помощью awk
  • Печать последнего элемента каждой строки
  • Извлечение строк из файла в зависимости от других строк
  • Есть ли более элегантный способ подсчета слов и присвоение этому числу переменных?
  • Linux и Unix - лучшая ОС в мире.