Subject: bug#13032: 24.3.50; Request: Provide a `delete-duplicate-lines' command

From: Thierry Volpiatto <[email-masked]>
Date: Tue, 04 Dec 2012 08:04:13 +0100

Hi, just for info, here a simple and fast version.

Dani Moncayo <[email-masked]> writes:

>> This is what I currently use to delete duplicate lines:
>>
>>   C-u M-| awk -- '!a[$0]++' RET
>>
>> Do you intend to create a Lisp function with the same result?
>
> I don't know awk, but I've tried that command and seems to do what I
> want: remove all duplicate lines in the region.  Although it don't
> inform about the number of lines deleted, which is important to me.

--8<---------------cut here---------------start------------->8---
(defun delete-duplicate-lines (beg end)
  "Delete duplicate lines in region."
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (let ((lines (helm-fast-remove-dups
                    (split-string (buffer-string) "\n" t)
                    :test 'equal)))
        (delete-region (point-min) (point-max))
        (loop for l in lines do (insert (concat l "\n")))))))
--8<---------------cut here---------------end--------------->8---

helm-fast-remove-dups is a function in helm:
https://github.com/emacs-helm/helm/blob/master/helm-utils.el
line 342

For the number of lines removed it is easy to modify the function to do
so.

-- 
  Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997