Можно ли использовать uniq, чтобы удалить одну дублирующую строку, сохранив при этом другую?

У меня есть файл чисел в разных строках. Есть много дубликатов. Я хотел бы удалить одну строку дубликатов, оставив другую строку.

uniq -d удаляет обе строки. Есть ли способ удалить только одну строку, оставив вторую идентичную строку?

0
задан 8 July 2018 в 00:42

2 ответа

  • Сортировка чисел с помощью sort
  • Удалите дубликаты с помощью uniq. Вам не нужен вариант.

Пример с цифрами и двумя пустыми строками:

$ cat unsorted

1
2
3
1
2
3
4
3
2
1

$ sort unsorted


1
1
1
2
2
2
3
3
3
4
$ sort unsorted | uniq

1
2
3
4
1
ответ дан 8 July 2018 в 00:42

Если Вы хотите произвести только первое вхождение каждой строки без сортировки, использовать awk или perl поддержать хеш (ассоциативный массив)

awk '!a[$0]++' file

или

perl -ne 'print unless $h{$_}++' file

Если Вы хотите сохранить последнее вхождение, то сделайте то же самое, но считайте файл назад и инвертируйте его после:

tac file | awk '!a[$0]++' | tac

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

1
ответ дан 8 July 2018 в 00:42

Другие вопросы по тегам:

Похожие вопросы: