He all, Tengo un archivo que tiene algunas columnas. Me gustaría hacer una ordenación para la columna 2 y luego aplicar uniq para la columna 1. Encontré este post hablando de ordenación y uniq para la misma columna, pero mi problema es un poco diferente. Estoy pensando en usar algo usando sort
y uniq
pero no sé cómo. Gracias.cómo ordenar basado en una columna pero uniq basado en otra columna?
Respuesta
Puede usar tubería, pero no está en su lugar.
Ejemplo:
$ cat initial.txt
1,3,4
2,3,1
1,2,3
2,3,4
1,4,1
3,1,3
4,2,4
$ cat initial.txt | sort -u -t, -k1,1 | sort -t, -k2,2
3,1,3
4,2,4
1,3,4
2,3,1
El resultado está ordenada por la llave 2, único por la llave 1. Observe que resultado se muestra en la consola, si lo desea en un archivo, sólo tiene que utilizar una redirección (> newFiletxt
)
otra solución para este tipo de operación más compleja es confiar en una herramienta más (dependiendo de sus preferencias (y edad), awk, perl o Python)
EDITAR: Si he entendido bien el nuevo requisito, que está ordenada por Colum 2, columna 1 es único para una determinada columna 2:
$ cat initial.txt | sort -u -t, -k1,2 | sort -t, -k2,2
3,1,3
1,2,3
4,2,4
1,3,4
2,3,1
1,4,1
¿Es lo que esperas? De lo contrario, yo no entendía :-)
uniq
necesita los datos para estar en forma ordenada para trabajar, por lo que si sort
el segundo campo y luego aplicar uniq
el primer campo, no obtendrá resultado correcto.
es posible que desee probar
sort -u -t, -k1,1 filename | sort -t, -k2,2
Gracias Lobo ... pero primero tengo que hacer la ordenación y encontrar los únicos en la primera columna en los que puede haber valores duplicados en la columna 1, pero no estarán al lado de cada uno otro. Me sorprende que el comando uniq en Linux no tenga un parámetro para especificar una columna específica. Gracias. – Ken
el comando 'uniq' le da la opción de elegir campos. echa un vistazo a '-f',' s' y otras opciones. ¿Estás buscando 'sort -t '' -k2,2 b | uniq -f1'? ¿Podría proporcionar un ejemplo de entrada y salida que está buscando? – Lobo
pero '-f' y' -s' saltearán el PRIMER número de columnas/caracteres para la comparación de unicidad. No permiten columnas específicas. La segunda respuesta de Bruce funciona para mi tarea actual ahora. Gracias. – Ken
sólo para estar seguro de que me dieron lo que quiere decir correctamente. Desea ordenar un archivo basado en la segunda columna del archivo. Luego desea eliminar los duplicados de la primera columna (¡otra forma de decir aplicando uniq a la columna uno!). fresco, para hacer esto, es necesario realizar tres tareas:
- ordenar la columna sobre la que se va a aplicar uniq (ya Uniq puede trabajo sólo en la entrada ordenada).
- aplicar uniq en la columna ordenada.
- ordena la salida según los valores de la columna dos.
El uso de tuberías: El comando es
sort -t ',' -k1 fileName| awk '!x[$1]++' | sort -t ',' -k2
Tenga en cuenta que no se puede especificar el primer campo de uniq, puede utilizar el interruptor -f
para saltar los primeros n
campos. Por lo tanto, utilicé awk
para reemplazar uniq
.
¿Puedes explicar ese comando awk? –
He utilizado este sort -t ',' -nk2
aquí ordena
1,2
2,5
3,1
to
3,1
1,2
2,5
- 1. Ordenar una matriz bidimensional basado en una columna
- 2. Cómo establecer un valor predeterminado para una columna en SQL basado en otra columna
- 3. Excel: ordenar una columna basada en otra columna
- 4. Insertar en una columna seleccionando otra columna en otra tabla pero cómo llenar la segunda columna
- 5. Al crear una columna usando liquibase, ¿cómo especifico un valor para esa columna basado en una columna existente?
- 6. Usar distinct en una columna y ordenar por en otra columna da un error
- 7. SQL actualiza una columna de otra columna en otra tabla
- 8. Seleccione un valor para basado en un valor más alto en otra columna
- 9. Filtro basado en un nombre de columna con alias
- 10. Java ResultSet - get Nombre de columna basado en el índice
- 11. ¿Cómo generar código basado en otra clase?
- 12. Oracle SQL - ¿Cómo puedo repetir un carácter basado en un valor en una columna
- 13. ¿Columna calculada basada en otra columna calculada?
- 14. obtener la media columna A basado en un rango de valores de la columna B
- 15. ¿Cómo usar un índice basado en funciones en una columna que contiene NULLs en Oracle 10+?
- 16. ¿Columna calculada desde otra columna?
- 17. actualización de MySQL una columna con un int basado en el orden
- 18. ¿Cómo ordenar automáticamente una columna QTreeWidget?
- 19. ¿Cómo ordenar un QTableView por una columna?
- 20. Ordenando una columna basada en otra columna en la cuadrícula ExtJs 4.1
- 21. enmascarar un array numpy 2D basado en los valores en una columna
- 22. ordenar csv por columna
- 23. Permitir que se edite una columna pero no otra
- 24. Columna Tk treeview ordenar
- 25. Vector de búsqueda de Excel basado en otra fórmula
- 26. cómo ordenar Tlistview basado en el subelemento [x]
- 27. ¿Cómo ordenar un treemap basado en sus valores?
- 28. Seleccione una columna si la otra columna es nula
- 29. Agregar una columna después de otra columna dentro de SQL
- 30. ¿Cómo ordenar el contenido de un archivo en el lugar por una columna?
Gracias Bruce por su respuesta. hmhm .... pero mi caso tendrá que ordenar primero y luego uniq.Lo que eso significa es que la primera columna puede tener valores duplicados pero no uno al lado del otro. ¿Alguna idea más? Soy un principiante para awk pero si tienes una buena solución para ello. Me gustaría usarlo Gracias. – Ken
¿Podría proporcionar una muestra de datos y un resultado esperado, p. en http://pastebin.com? No estoy seguro de entender por completo – Bruce
Genial ... este funciona para mí ... aunque no es lo suficientemente robusto para una columna no consecutiva. Lo hará para mi tarea actual. Montones de gracias. – Ken