linux - tag - Encuentra líneas únicas
tag editor linux (7)
Esta fue la primera vez que lo 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
¿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 sea:
2
3
sort file | uniq
sort file | uniq
no hará el trabajo. Mostrará todos los valores 1 vez
Use de la siguiente manera:
sort < filea | uniq > fileb
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):
Suponiendo que tiene el archivo de datos en notUnique.txt
#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''))
Tenga en cuenta que debido a líneas vacías, el conjunto final puede contener cadenas '''' o solo espacio. Puedes eliminar eso más tarde. O simplemente salirse con la copia de la terminal;)
#Solo para tu información, en la página Man de uniq:
"Nota: ''uniq'' no detecta líneas repetidas a menos que sean adyacentes. Puede 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
Ejecución de ejemplo:
$ 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
Los espacios pueden ser impresos, ¡así que prepárate!
uniq -u < file
hará el trabajo.
uniq
debería funcionar bien si su archivo es / 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}''
uniq
tiene la opción que necesita:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
sort -d "file name" | uniq -u
esto funcionó para mí por uno similar. Use esto si no está arreglado. Puede eliminar la ordenación si está organizada