Сортировка полей 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 
  • Извлечение значения между двойными кавычками
  • Как удалить последний столбец файла в Linux
  • Извлечение многострочного регулярного выражения без вкладок
  • максимальное значение матрицы
  • Почему число округлено по ssh?
  • Как вычесть строки из первой строки с помощью awk?
  • Как искать и печатать соответствующее значение соответствия из командной строки?
  • заменить строку сложного текста в нескольких файлах
  • удалить дублируемую запись из файла1, если запись присутствует в файле2
  • файлы списка tar, перерыв в первом файле
  • Как удалить последние n символов определенного столбца
  • Linux и Unix - лучшая ОС в мире.