Подтвердить что ты не робот

Сортировка и удаление повторяющихся слов в строке

Команда sort позволяет помещать строки в алфавитном порядке и удалять повторяющиеся строки. Мне нужно что-то подобное, которое может сортировать слова в одной строке, приводить их в порядок и удалять любые дубликаты. Есть ли команда для этого?

например:.

zebra ant spider spider ant zebra ant

Изменения:

ant spider zebra

Перед первым словом или после последнего слова нет пробела.

4b9b3361

Ответ 1

Это работает для меня:

$ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs
ant spider zebra

Вы можете преобразовать список слов в одной строке в один столбец с помощью xargs -n1, использовать sort -u и преобразовать обратно в одну строку с помощью xargs.

Ответ 2

Оболочка была создана для синтаксического анализа [:blank:] отдельных списков слов. Поэтому использование xargs полностью избыточно. "Уникальные" вещи можно сделать, но просто проще использовать сортировку.

echo $(printf '%s\n' zebra ant spider spider ant zebra ant | sort -u)

Ответ 3

Используйте tr, чтобы изменить пробелы на новые строки, затем sort и, наконец, измените новые строки на пробелы.

tr ' ' '\n' <<< "zebra ant spider spider ant zebra ant" | sort -u | tr '\n' ' '

Ответ 4

Все ответы до этого могут сортировать только одну строку во времени. Для соединения всего списка таких строк можно использовать следующее: он будет печатать отсортированный список уникальных слов для каждой строки.

awk '{ delete a; for (i=1; i<=NF; i++) a[$i]++; n=asorti(a, b); for (i=1; i<=n; i++) printf b[i]" "; print "" }'

Спасибо @jaypai за синтаксис, используемый в этом.

Пример:

>cat file
group label wearable edit_group edit_group_order label_max camera_elevation camera_distance name label_min label_max value_min value_max camera_angle camera_elevation id
id group label wearable edit_group clothing_morph value_min value_max name value_default clothing_morph group
id label show_simple wearable name edit_group edit_group_order group clothing_morph clothing_morph camera_distance label_min label_max value_min value_max camera_distance camera_angle
id group label wearable name edit_group clothing_morph value_min value_max value_default
group label wearable id clothing_morph edit_group edit_group_order label_min label_max value_min value_max name camera_distance camera_angle camera_elevation
id group label wearable edit_group name label_min label_max value_min value_max wearable
name id group wearable edit_group id group wearable id group wearable id group wearable value_min value_max

>cat file | awk '{ delete a; for (i=1; i<=NF; i++) a[$i]++; n=asorti(a, b); for (i=1; i<=n; i++) printf b[i]" "; print "" }'
camera_angle camera_distance camera_elevation edit_group edit_group_order group id label label_max label_min name value_max value_min wearable 
clothing_morph edit_group group id label name value_default value_max value_min wearable 
camera_angle camera_distance clothing_morph edit_group edit_group_order group id label label_max label_min name show_simple value_max value_min wearable 
clothing_morph edit_group group id label name value_default value_max value_min wearable 
camera_angle camera_distance camera_elevation clothing_morph edit_group edit_group_order group id label label_max label_min name value_max value_min wearable 
edit_group group id label label_max label_min name value_max value_min wearable 
edit_group group id name value_max value_min wearable

Ответ 5

Используйте python

$ echo "zebra ant spider spider ant zebra ant" | python -c 'import sys; print(" ".join(sorted(set(sys.stdin.read().split()))))'
ant spider zebra

Ответ 6

Использование perl:

perl -lane '
  %a = map { $_ => 1 } @F;
  print join qq[ ], sort keys %a;
' <<< "zebra ant spider spider ant zebra ant"

Результат:

ant spider zebra

Ответ 7

Использование awk:

awk '{for(i=1;i<=NF;i++) a[$i]++} END{for(i in a) printf i" ";print ""}' INPUT_FILE

Тест:

[jaypal:~/Temp] cat file
zebra ant spider spider ant zebra ant
[jaypal:~/Temp] awk '{for (i=1;i<=NF;i++) a[$i]++} END{for (i in a) printf i" ";print ""}' file
zebra spider ant