Сортировка полей 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}' но похоже, что это будет беспорядочно для более чем двух полей. Любая помощь?

Один из способов использования 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