Lo que quiero lograr es ordenar líneas de texto por un punto específico del texto (las líneas de texto no tienen espacios ni columnas). He encontrado una solución para esto, pero quiero saber si hay una forma más directa y sencilla de hacerlo.
Mi método actual para esto es provocar una ruptura, es decir, crear una nueva columna en el mismo lugar en cada línea (justo antes del punto por el que quiero ordenar, siendo Sn_L001_Rn) y luego ordenar por esa columna y luego unir las dos columnas. de nuevo juntos. Esto funciona pero parece demasiado complicado y torpe. He visto publicaciones sobre cómo crear un sistema de puntuación con awk, pero como el mío va a llegar al menos a 96, esto parece largo. También he visto que sqlite podría ser aplicable, pero esto también parece igualmente largo. Pido disculpas si ya se ha hecho esta pregunta, pero hasta ahora no he podido encontrar un método sencillo para resolverla.
Aquí hay algunos ejemplos de entrada:
SOON_S2_L001_R1_001.txt
SOON_S2_L001_R2_001.txt
HELLO_S4_L001_R1_001.txt
HELLO_S4_L001_R2_001.txt
BASH_S1_L001_R1_001.txt
BASH_S1_L001_R2_001.txt
WORLD_S3_L001_R1_001.txt
WORLD_S3_L001_R2_001.txt
Salida deseada:
BASH_S1_L001_R1_001.txt
BASH_S1_L001_R2_001.txt
SOON_S2_L001_R1_001.txt
SOON_S2_L001_R2_001.txt
WORLD_S3_L001_R1_001.txt
WORLD_S3_L001_R2_001.txt
HELLO_S4_L001_R1_001.txt
HELLO_S4_L001_R2_001.txt
Para agregar mayor complejidad, en una situación en la que hay más de 1 del mismo Sn, me gustaría que se tuviera en cuenta el nombre (aunque creo que esto se puede resolver usando indicadores en sort
).
Respuesta1
sort -t_ -k2 infile
ordenará los datos usando la segunda clave con guión bajo como separador.