Tengo un archivo de texto que contiene una larga lista de entradas (una en cada línea). Algunos de estos son duplicados y me gustaría saber si es posible (y si es así, cómo) eliminar los duplicados. Estoy interesado en hacer esto desde vi / vim, si es posible.
vim
duplicates
Sydius
fuente
fuente
Respuestas:
Si está de acuerdo con ordenar su archivo, puede usar:
fuente
:%!uniq
para eliminar las entradas duplicadas sin clasificar el archivo.u
Prueba esto:
Busca cualquier línea seguida inmediatamente por una o más copias de sí mismo y la reemplaza con una sola copia.
Sin embargo, haga una copia de su archivo antes de intentarlo. No está probado.
fuente
Desde la línea de comando simplemente haz lo siguiente:
fuente
:sort u
estaba colgando en mi archivo grande. Esto funcionó muy rápida y perfectamente. ¡Gracias!'uniq' is not recognized as an internal or external command, operable program or batch file.
awk '!x[$0]++' yourfile.txt
si desea conservar el orden (es decir, la clasificación no es aceptable). Para invocarlo desde vim,:!
se puede utilizar.fuente
Funciona para mí en Windows. Sin embargo, las líneas deben ordenarse primero.
fuente
aaaa
seguida deaaaabb
eliminará poraaaa
error.Combinaría dos de las respuestas anteriores:
Si estaba interesado en ver cuántas líneas duplicadas se eliminaron, use control-G antes y después para verificar la cantidad de líneas presentes en su búfer.
fuente
'uniq' is not recognized as an internal or external command, operable program or batch file.
Seleccione las líneas en modo de línea visual ( Shift+ v), luego
:!uniq
. Eso solo detectará duplicados que vengan uno tras otro.fuente
Con respecto a cómo se puede implementar Uniq en VimL, busque Uniq en un complemento que estoy manteniendo . Verá varias formas de implementarlo que se proporcionaron en la lista de correo de Vim.
De lo contrario,
:sort u
es de hecho el camino a seguir.fuente
o
Esta es mi respuesta para ti, ¡puede eliminar varias líneas duplicadas y solo mantener una, no eliminar!
fuente
yo usaría
!}uniq
, pero eso solo funciona si no hay líneas en blanco.Para cada línea en un archivo de uso:
:1,$!uniq
.fuente
Esta versión solo elimina las líneas repetidas que están contigo. Quiero decir, solo borra líneas repetidas consecutivas. Usando el mapa dado, la función nota problemas con líneas en blanco. Pero si cambia el REGEX para que coincida con el inicio de la línea
^
, también eliminará las líneas en blanco duplicadas.fuente
Un método alternativo que no usa vi / vim (para archivos muy grandes) es, desde la línea de comandos de Linux, use sort y uniq:
fuente
Esto funcionó para mí para ambos
.csv
y.txt
awk '!seen[$0]++' <filename> > <newFileName>
Explicación: La primera parte del comando imprime filas únicas y la segunda parte, es decir, después de la flecha central, es para guardar la salida de la primera parte.
awk '!seen[$0]++' <filename>
>
<newFileName>
fuente