¿Cómo puedo encontrar las líneas únicas y eliminar todos los duplicados de un archivo? Mi archivo de entrada es
1
1
2
3
5
5
7
7
Me gustaría que el resultado fuera:
2
3
sort file | uniq
no hará el trabajo. Mostrará todos los valores 1 vez
¿Cómo puedo encontrar las líneas únicas y eliminar todos los duplicados de un archivo? Mi archivo de entrada es
1
1
2
3
5
5
7
7
Me gustaría que el resultado fuera:
2
3
sort file | uniq
no hará el trabajo. Mostrará todos los valores 1 vez
sort file | uniq
muestran todos los valores 1 vez es porque imprime inmediatamente la línea que encuentra la primera vez, y para los encuentros posteriores, simplemente los omite.
Respuestas:
uniq
tiene la opción que necesitas:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Úselo de la siguiente manera:
sort < filea | uniq > fileb
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Quizás dejaste fuera las extensiones. Estoy usando Mac OS X. tienes que ir de filea.txt
a otrofileb.txt
sort
y cuál es el punto de la canalización uniq
cuando puede hacer sort -u file -o file
lo que está haciendo es eliminar los valores duplicados, es decir, su fileb
contiene, 1,2,3,5,7
el OP solo quiere las líneas únicas que 2,3
se logran y se logra mediante la uniq -u file
extensión de archivo no tiene nada con eso, tu respuesta es incorrecta.
También puede imprimir el valor único en "archivo" utilizando el cat
comando mediante la conexión sort
yuniq
cat file | sort | uniq -u
uniq -u me ha estado volviendo loco porque no funcionó.
Entonces, en lugar de eso, si tiene Python (la mayoría de las distribuciones y servidores de Linux ya lo tienen):
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
Solo para su información, desde la página de manual de uniq:
"Nota: 'uniq' no detecta líneas repetidas a menos que sean adyacentes. Es posible que desee ordenar la entrada primero o usar 'sort -u' sin 'uniq'. Además, las comparaciones respetan las reglas especificadas por 'LC_COLLATE'".
Una de las formas correctas, para invocar con: # sort nonUnique.txt | uniq
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
uniq -u < file
hará el trabajo.
uniq
debería funcionar bien si su archivo está / puede ser ordenado, si no puede ordenar el archivo por alguna razón, puede usar awk
:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
esto funcionó para mí para uno similar. Use esto si no está arreglado. Puede eliminar el orden si está organizado
Encuentro esto más fácil.
sort -u input_filename > output_filename
-u
significa único.
Esta fue la primera que intenté
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Después de hacer un cat -e all.sorted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Cada segunda línea tiene un espacio final :( ¡Después de eliminar todos los espacios finales, funcionó!
gracias
sort file | uniq -u
saldrá a la consola para usted.