Удалить дубли строк linux

Sorting and removing duplicate words in a line

The sort command lets me put lines in alphabetical order and remove duplicate lines. I need something similar that can sort the words on a single line, put them in order, and remove any duplicates. Is there a command for this? E.g.:

zebra ant spider spider ant zebra ant 

7 Answers 7

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

You can transform a list of words in a single row to a single column with xargs -n1 , use sort -u and transform back to a single row with xargs .

The shell was built to parse [:blank:] seperated word lists already. Therefore the use of xargs is completely redundant. The «unique» stuff can be done but its just easier to use sort.

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

I like this answer. Can you expand on the need for ‘echo’ ? Can you not just do: printf ‘%s\n’ zebra ant spider spider ant zebra ant | sort -u

Ah. I figured it out. It’s to get them back into a string again instead of being multi-line. I’ll leave my comment for the next person that doesn’t immediately figure it out.

Use tr to change spaces to new lines, then sort , and finally change new lines back to spaces.

All of the answers prior to this one can only sort a single line at time. The following can be used to pipe a whole list of such lines into and it will print the sorted list of unique words for each line.

Thanks @jaypai for a lot of the syntax used in this.

>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' 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 

Источник

Читайте также:  What is smb service linux

🐧 Удаление повторяющихся строк из текстового файла с помощью командной строки Linux

Удаление повторяющихся строк из текстового файла можно выполнить из командной строки Linux.

Такая задача может быть более распространенной и необходимой, чем вы думаете.

Чаще всего это может быть полезно при работе с файлами логов.

Зачастую файлы логов повторяют одну и ту же информацию снова и снова, что делает практически невозможным просмотр файлов.

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

Попробуйте некоторые команды в своей системе и используйте ту, которая наиболее удобна для вашего сценария.

Эти примеры будут работать в любом дистрибутиве Linux при условии, что вы используете оболочку Bash.

В нашем примере сценария мы будем работать с файлом, который просто содержит имена различных дистрибутивов Linux.

Это очень простой текстовый файл для примера, но на самом деле вы можете использовать эти методы для документов, содержащих даже тысячи повторяющихся строк.

Мы увидим, как удалить все дубликаты из этого файла, используя приведенные ниже примеры.

$ cat distros.txt Ubuntu CentOS Debian Ubuntu Fedora Debian openSUSE openSUSE Debian

Пример 1

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

$ sort distros.txt | uniq CentOS Debian Fedora openSUSE Ubuntu

Чтобы упростить задачу, мы можем просто использовать -u с sort, чтобы получить тот же точный результат, вместо перехода к uniq.

$ sort -u distros.txt CentOS Debian Fedora openSUSE Ubuntu

Пример 2

Чтобы увидеть, сколько повторений каждой строки находится в файле, мы можем использовать параметр -c (count) с uniq.

$ sort distros.txt | uniq -c 1 CentOS 3 Debian 1 Fedora 2 openSUSE 2 Ubuntu

Пример 3

Чтобы увидеть наиболее часто повторяющиеся строки, мы можем передать по пайпу еще одну команду sort с параметрами -n (числовая сортировка) и -r в обратном направлении.

Читайте также:  Настройка центра сертификации linux

Это позволяет нам быстро увидеть, какие строки в файле больше всего дублируются – еще один удобный вариант для просмотра логов.

$ sort distros.txt | uniq -c | sort -nr 3 Debian 2 Ubuntu 2 openSUSE 1 Fedora 1 CentOS

Пример 4

Одна из проблем с использованием предыдущих команд заключается в том, что мы полагаемся на сортировку.

Это означает, что наш окончательный результат отсортирован по алфавиту или по количеству повторов, как в предыдущем примере.

Иногда это может быть хорошо, но что, если нам нужно, чтобы текстовый файл сохранил свой предыдущий порядок?

Мы можем удалить повторяющиеся строки без сортировки файла, используя команду awk в следующем синтаксисе.

$ awk '!seen[__g5_token60a1f36c18105]++' distros.txt Ubuntu CentOS Debian Fedora openSUSE

С помощью этой команды сохраняется первое вхождение строки, а будущие повторяющиеся строки удаляются из вывода.

Источник

How to remove duplicate lines inside a text file?

A huge (up to 2 GiB) text file of mine contains about 100 exact duplicates of every line in it (useless in my case, as the file is a CSV-like data table). What I need is to remove all the repetitions while (preferably, but this can be sacrificed for a significant performance boost) maintaining the original sequence order. In the result each line is to be unique. If there were 100 equal lines (usually the duplicates are spread across the file and won't be neighbours) there is to be only one of the kind left. I have written a program in Scala (consider it Java if you don't know about Scala) to implement this. But maybe there are faster C-written native tools able to do this faster? UPDATE: the awk '!seen[$0]++' filename solution seemed working just fine for me as long as the files were near 2 GiB or smaller but now as I am to clean-up a 8 GiB file it doesn't work any more. It seems taking infinity on a Mac with 4 GiB RAM and a 64-bit Windows 7 PC with 4 GiB RAM and 6 GiB swap just runs out of memory. And I don't feel enthusiastic about trying it on Linux with 4 GiB RAM given this experience.

Читайте также:  Linux второй монитор ноутбук

this will destroy your ordering but,have you tried sort -u, I have no idea how or if it can run on such a massive file

C is often not significantly faster than Java, and if you're running it (in-order) now, there's a fair chance it'll finish before you get an answer here, implement it, and it finishes running; out of order, sort -u will probably be faster.

Источник

Удаляем дубликаты строк из файла средствами Linux

archive view archive save

article

Как средствами Linux удалить дубликаты строк из текстового файла? Удаление дубликатов строк из текстового файла средствами ОС Linux не составляет особого труда, для этого нам достаточно стандартных программ sort и uniq. К примеру у нас имеется текстовый файл garbage.txt с содержимым:

строка 1 строка 2 строка 3 строка 1 строка 4 строка 5 строка 1 строка 6 строка 7
$ sort garbage.txt | uniq -u строка 2 строка 3 строка 4 строка 5 строка 6 строка 7
$ sort garbage.txt | uniq -u > sort.txt

Источник

Оцените статью
Adblock
detector