J'ai un fichier texte qui contient une longue liste d'entrées (une sur chaque ligne). Certains d'entre eux sont des doublons, et j'aimerais savoir s'il est possible (et si oui, comment) de supprimer les doublons. Je suis intéressé à faire cela depuis vi / vim, si possible.
vim
duplicates
Sydius
la source
la source
Réponses:
Si vous êtes d'accord pour trier votre fichier, vous pouvez utiliser:
la source
:%!uniq
pour supprimer simplement les entrées en double sans trier le fichier.u
Essaye ça:
Il recherche toute ligne immédiatement suivie d'une ou plusieurs copies de lui-même et la remplace par une seule copie.
Faites une copie de votre fichier avant de l'essayer. Ce n'est pas testé.
la source
À partir de la ligne de commande, faites simplement:
la source
:sort u
était accrochée à mon gros fichier. Cela a fonctionné très rapidement et parfaitement. Je vous remercie!'uniq' is not recognized as an internal or external command, operable program or batch file.
awk '!x[$0]++' yourfile.txt
si vous souhaitez conserver l'ordre (c'est-à-dire que le tri n'est pas acceptable). Afin de l'invoquer depuis vim,:!
peut être utilisé.la source
Fonctionne pour moi sur Windows. Les lignes doivent cependant être triées en premier.
la source
aaaa
suivi deaaaabb
supprimera paraaaa
erreur.Je combinerais deux des réponses ci-dessus:
Si vous souhaitez voir combien de lignes dupliquées ont été supprimées, utilisez control-G avant et après pour vérifier le nombre de lignes présentes dans votre tampon.
la source
'uniq' is not recognized as an internal or external command, operable program or batch file.
Sélectionnez les lignes en mode visuel-ligne ( Shift+ v), puis
:!uniq
. Cela n'attrapera que les doublons qui se succèdent.la source
En ce qui concerne la façon dont Uniq peut être implémenté dans VimL, recherchez Uniq dans un plugin que je gère . Vous verrez différentes façons de l'implémenter qui ont été données sur la liste de diffusion Vim.
Sinon,
:sort u
c'est bien la voie à suivre.la source
ou
c'est ma réponse pour vous, il peut supprimer plusieurs lignes en double et n'en garder qu'une seule pas supprimer!
la source
J'utiliserais
!}uniq
, mais cela ne fonctionne que s'il n'y a pas de lignes vides.Pour chaque ligne dans une utilisation du fichier:
:1,$!uniq
.la source
Cette version supprime uniquement les lignes répétées qui sont contigues. Je veux dire, ne supprime que les lignes répétées consécutives. En utilisant la carte donnée, la fonction note des erreurs avec des lignes vides. Mais si vous modifiez le REGEX pour qu'il corresponde au début de la ligne,
^
il supprimera également les lignes vierges dupliquées.la source
Une méthode alternative qui n'utilise pas vi / vim (pour les fichiers très volumineux), est à partir de la ligne de commande Linux, utilisez sort et uniq:
la source
Cela a fonctionné pour moi à la fois
.csv
et.txt
awk '!seen[$0]++' <filename> > <newFileName>
Explication: La première partie de la commande imprime des lignes uniques et la deuxième partie, c'est-à-dire après la flèche du milieu, consiste à enregistrer la sortie de la première partie.
awk '!seen[$0]++' <filename>
>
<newFileName>
la source