¿Cómo puedo ordenar cadenas con más de un requisito previo?

¿Cómo puedo ordenar cadenas con más de un requisito previo?

Tengo un montón de cadenas (alrededor de ~300) y todas tienen 4 letras, por lo que XYZA, ZHF3, RTt2 etc.quiero ordenarlas según el requisito de 2.

  1. Ordenarlos en orden de las últimas 2 letras.
  2. Ordene las palabras que incluyen las mismas 2 últimas letras dependiendo de las 2 primeras letras

Lo que significa que tengo cadenas en formato XXYY y quiero ordenarlas con las reglas que se muestran.

Estoy intentando hacerlo, sort -k.1.3,1.4pero los que tienen lo mismo están ordenados al azar, como por ejemplo 15AA, a2AA, 0CAA etc.¿Cómo puedo deshacerme de él?

Respuesta1

-kse puede utilizar más de una vez. Cuando hay varios campos clave, las claves posteriores se comparan solo después de que todas las claves anteriores sean iguales.

<datafile sort -k 1.3,1.4 -k 1.1,1.2

Y recuerde que la clasificación depende de LC_COLLATE.

Respuesta2

Realice las operaciones a la inversa: primero ordene pordos primerosletras, y luego por las dos últimas. Creo que incluso puedes hacer esto:

cat file | sort | sort -k 1.3 -s

El sortcomando puede realizar unaestableordenar, es decir, si dos líneas son "iguales", preservará su orden relativo entre sí. Entonces, en el segundo paso, las líneas con letras idénticas 3.ª y 4.ª conservarán convenientemente el orden del primer paso.

información relacionada