Sé que la opción -k para la ordenación de Unix nos permite ordenar por una columna específica y todo lo siguiente . Por ejemplo, dado el archivo de entrada:
2 3
2 2
1 2
2 1
1 1
Utilizando sort -n -k 1
, obtengo una salida ordenada por la primera columna y luego por la segunda:
1 1
1 2
2 1
2 2
2 3
Sin embargo, quiero mantener el orden de la segunda columna, así:
1 2
1 1
2 3
2 2
2 1
¿Es esto posible con el sort
comando?
join
es que la entrada se ordene en los campos en los que se está uniendo. Así que seguro, esta salida se ordena en el primer campo, y puede unirse en él.-k 1,1
(la parte " , 1 ") no funciona mejor para mí. Lo que funciona es-s -k 1
,-n
si lo necesitas.Para ordenar solo en la primera columna, debe hacer:
Del Manual de Administración del Sistema Unix y Linux
fuente
-s
opción como señaló Cascabel.-s
dice "Esta opción mantiene el orden de registro original de los registros que tienen una clave igual".Ninguna de las respuestas proporcionadas funciona en general para mí.
Ambos
sort -s -k 2 file1
ysort -n -k1,1
haga una ordenación adicional con este archivo:Solo tenía que hacer esto exactamente y terminé usando un bucle de shell. Es posible que esta solución no funcione bien en un archivo muy grande porque es necesario leer todo el archivo para cada valor único en la columna ordenada.
Aquí el archivo se ordena solo en la columna 2.
fuente
sort -s -k2,2 file1