El archivo debe ordenarse primero. sort file | uniq -usaldrá a la consola para usted.
ma77c
Creo que la razón por la que se 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.
Esto no es correcto, creo que quiso decir:uniq -u filea > fileb
Chris Seymour
1
Copio sus datos y corro y funciona: 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
kasavbere
No hay necesidad de la redirección con 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.
Chris Seymour
12
También puede imprimir el valor único en "archivo" utilizando el catcomando mediante la conexión sortyuniq
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 las líneas vacías, el conjunto final puede contener '' o cadenas de solo espacio. Puedes eliminar eso más tarde. O simplemente salga con la suya copiando desde la terminal;)
#
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
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 estar impresos, ¡así que prepárate!
Si bien sorttoma O (n log (n)) tiempo, prefiero usar
awk '!seen[$0]++'
awk '!seen[$0]++'es una abreviatura de awk '!seen[$0]++ {print}', print line (= $ 0) si seen[$0]no es cero. Se necesita más espacio pero solo O (n) tiempo.
sort file | uniq -u
saldrá a la consola para usted.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:fuente
Úselo de la siguiente manera:
fuente
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Quizás dejaste fuera las extensiones. Estoy usando Mac OS X. tienes que ir defilea.txt
a otrofileb.txt
sort
y cuál es el punto de la canalizaciónuniq
cuando puede hacersort -u file -o file
lo que está haciendo es eliminar los valores duplicados, es decir, sufileb
contiene,1,2,3,5,7
el OP solo quiere las líneas únicas que2,3
se logran y se logra mediante launiq -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ónsort
yuniq
cat file | sort | uniq -u
fuente
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
Tenga en cuenta que debido a las líneas vacías, el conjunto final puede contener '' o cadenas de solo espacio. Puedes eliminar eso más tarde. O simplemente salga con la suya copiando desde la terminal;)
#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
Ejecución de ejemplo:
Los espacios pueden estar impresos, ¡así que prepárate!
fuente
Si bien
sort
toma O (n log (n)) tiempo, prefiero usarawk '!seen[$0]++'
es una abreviatura deawk '!seen[$0]++ {print}'
, print line (= $ 0) siseen[$0]
no es cero. Se necesita más espacio pero solo O (n) tiempo.fuente
puedes usar:
esto ordena los datos y filtra por valores únicos
fuente
uniq -u < file
hará el trabajo.fuente
uniq
debería funcionar bien si su archivo está / puede ser ordenado, si no puede ordenar el archivo por alguna razón, puede usarawk
:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
fuente
esto funcionó para mí para uno similar. Use esto si no está arreglado. Puede eliminar el orden si está organizado
fuente
Encuentro esto más fácil.
-u
significa único.fuente
Esta fue la primera que intenté
Después de hacer un cat -e all.sorted
Cada segunda línea tiene un espacio final :( ¡Después de eliminar todos los espacios finales, funcionó!
gracias
fuente