У меня есть текстовый файл, содержащий длинный список записей (по одной в каждой строке). Некоторые из них являются дубликатами, и я хотел бы знать, можно ли (и если да, то как) удалить любые дубликаты. Мне интересно сделать это из vi / vim, если это возможно.
vim
duplicates
Sydius
источник
источник
Ответы:
Если вы согласны с сортировкой файла, вы можете использовать:
источник
:%!uniq
чтобы просто удалить повторяющиеся записи без сортировки файла.u
Попробуй это:
Он ищет любую строку, за которой сразу следует одна или несколько собственных копий, и заменяет ее одной копией.
Сделайте копию своего файла, прежде чем попробовать. Это не проверено.
источник
Из командной строки просто выполните:
источник
:sort u
он висел в моем большом файле. Это сработало очень быстро и идеально. Спасибо!'uniq' is not recognized as an internal or external command, operable program or batch file.
awk '!x[$0]++' yourfile.txt
если вы хотите сохранить порядок (т. е. сортировка недопустима). Чтобы вызвать его из vim,:!
можно использовать.источник
У меня работает в Windows. Однако сначала необходимо отсортировать строки.
источник
aaaa
последующим ошибочнымaaaabb
удалениемaaaa
.Я бы совмещал два из приведенных выше ответов:
Если вам было интересно узнать, сколько повторяющихся строк было удалено, используйте control-G до и после, чтобы проверить количество строк, присутствующих в вашем буфере.
источник
'uniq' is not recognized as an internal or external command, operable program or batch file.
Затем выберите линии в режиме визуальных линий ( Shift+ v)
:!uniq
. Это будет ловить только дубликаты, которые идут один за другим.источник
Что касается того, как Uniq может быть реализован в VimL, ищите Uniq в плагине, который я поддерживаю . Вы увидите различные способы его реализации, указанные в списке рассылки Vim.
В противном случае
:sort u
это действительно путь.источник
или
это мой ответ для вас, он может удалить несколько повторяющихся строк и сохранить только одну!
источник
Я бы использовал
!}uniq
, но это работает, только если нет пустых строк.Для каждой строки в файле используйте:
:1,$!uniq
.источник
Эта версия удаляет только повторяющиеся строки, которые совпадают. Я имею в виду, удаляет только последовательные повторяющиеся строки. При использовании данной карты функция не замечает беспорядка с пустыми строками. Но если изменить REGEX, чтобы он соответствовал началу строки,
^
он также удалит повторяющиеся пустые строки.источник
Альтернативный метод, который не использует vi / vim (для очень больших файлов), - это из командной строки Linux использовать sort и uniq:
источник
Это сработало для меня как для, так
.csv
и для.txt
awk '!seen[$0]++' <filename> > <newFileName>
Объяснение: Первая часть команды печатает уникальные строки, а вторая часть, т.е. после средней стрелки, предназначена для сохранения вывода первой части.
awk '!seen[$0]++' <filename>
>
<newFileName>
источник