2011-03-05 20 views
16

Tengo un archivo, digamos "bigfile", con los datos tabulares de la siguiente forma,¿Cómo ordenar por dos campos (uno numérico, una cadena) al mismo tiempo usando el programa incorporado "ordenar"?

a1 b2 a3 1
b1 a2 c3 0
... y así sucesivamente.

Quiero utilizar el programa integrado de "ordenamiento" en mi máquina Linux así que ordene este archivo por el cuarto campo (numérico) y luego por el primer campo al mismo tiempo. Fui a través de las páginas man un par de veces y lo único que se le ocurrió fue,

sort -n -k4,4 -k1,1 bigfile 

¿Hay una manera de hacer "tipo" hacer lo que quiero o tengo que escribir mi propio programa?

Gracias.

+0

¿Qué pasaba con -k4? – Orbit

+0

Eso no está funcionando? – Zimbabao

+3

@Orbit, creo que '-k4' simplemente * inicia * una clave en la columna 4. Pero el final de la clave no está especificado y, por lo tanto, la clave llega hasta el final. Entonces, '-k4 -k1', es realmente algo así como' -k4 -k5 -k6 -k7 -k1', y por lo tanto '-k1' es algo sin sentido. (Sí, es realmente contrario a la intuición, pero básicamente siempre debe hacer '-kX, X' para cada campo –

Respuesta

27

Desde la página de manual:

POS es F [.C] [OPTS], donde F es el número campo y C la posición del carácter en el campo; ambos son origen 1. Si no está activo -t ni -b, los caracteres de un campo se cuentan desde al comienzo del espacio en blanco anterior. OPTS es una o más opciones de pedido de una sola letra , que anulan las opciones de pedido globales para esa clave. Si no se proporciona ninguna clave, use toda la línea como la clave.

sort -k4,4n -k1,1 bigfile debería hacerlo.

Otra opción sería sort -k1,1 bigfile | sort --stable -n -k4,4 La clasificación estable significa que los vínculos en el 4to campo se resuelven en la posición inicial, que se establece por el primer paso de clasificación en ser el primer campo.

+2

Sí. Eso funciona. Gracias. – Vijay

Cuestiones relacionadas