Puede usar el comando sortcon la opción --unique:
sort -u input-file
Si desea escribir el resultado en ARCHIVO en lugar de la salida estándar, use la opción --output=FILE:
sort -u input-file -o output-file
El comando uniqtambién podría aplicarse. En este caso, las líneas idénticas deben ser consecuentes, por lo que la entrada debe clasificarse de forma preliminar, gracias a @RonJohn por esta nota:
sort input-file | uniq > output-file
Me gusta el sortcomando para casos similares, debido a su simplicidad, pero si trabaja con matrices grandes, el awkenfoque de la respuesta de John1024 podría ser más poderoso. Aquí hay una comparación de tiempo entre los enfoques mencionados, aplicada en un archivo (basado en el ejemplo anterior) con casi 5 millones de líneas:
$ cat input-file | wc -l
20000000
$ TIMEFORMAT=%R
$ time sort -u input-file | wc -l
64
7.495
$ time sort input-file | uniq | wc -l
64
7.703
$ time awk '!a[$0]++' input-file | wc -l # from John1024's answer
64
1.271
$ time datamash rmdup 1 < input-file | wc -l # from αғsнιη's answer
64
0.770
Otra diferencia significativa es la mencionada por @Ruslan :
sort -usolo imprimirá el resultado una vez que la entrada haya finalizado, mientras que este awkcomando imprimirá cada nueva línea de resultado sobre la marcha (esto puede ser más importante para la entrada canalizada que el archivo).
Aquí hay una ilustración:

En el ejemplo anterior, el bucle (que se muestra a continuación) genera 500 combinaciones aleatorias, cada una con una longitud de tres caracteres, de las letras AD. Estas combinaciones se canalizan al awko sort.
for i in {1..500}; do cat /dev/urandom | tr -dc A-D | head -c 3; echo; done
sort input-file | uniq!!!!Si desea mantener las líneas de salida en el mismo orden que las líneas de entrada, use:
Cómo funciona:
Esto usa una matriz asociativa
apara contar la cantidad de veces que cada línea se ha visto previamente. Si no se ha visto previamente, la línea se imprime.fuente
awk, perosort -ues la forma fácil.sort -utambién es la forma más lenta :) He actualizado mi respuesta con una comparación de tiempo entre los dos enfoques.sort -usolo imprimirá el resultado una vez que la entrada haya finalizado, mientras que esteawkcomando imprimirá cada nueva línea de resultado sobre la marcha (esto puede ser más importante para la entrada canalizada que el archivo).awksolución es muy buena, aunque no tan fácil de leer comosort.Puede usar GNU
datamashaquí también de la siguiente manera, y mantendrá el orden de las líneas.fuente
timecomparación, esta es la solución más rápida, proporcionada aquí.