¿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 | uniqno 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 | uniqno hará el trabajo. Mostrará todos los valores 1 vez
sort file | uniqmuestran 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.txta otrofileb.txt
sorty cuál es el punto de la canalización uniqcuando puede hacer sort -u file -o filelo que está haciendo es eliminar los valores duplicados, es decir, su filebcontiene, 1,2,3,5,7el OP solo quiere las líneas únicas que 2,3se logran y se logra mediante la uniq -u fileextensión de archivo no tiene nada con eso, tu respuesta es incorrecta.
También puede imprimir el valor único en "archivo" utilizando el catcomando mediante la conexión sortyuniq
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.
uniqdeberí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 -usaldrá a la consola para usted.