Classifique o texto por local específico em cada linha

Classifique o texto por local específico em cada linha

O que desejo alcançar é classificar as linhas de texto por um ponto específico do texto (as linhas de texto não possuem espaços ou colunas). Encontrei uma solução para isso, mas quero saber se existe uma maneira mais direta e simples de fazer isso.

Meu método atual para isso é causar uma quebra, ou seja, criar uma nova coluna no mesmo lugar em cada linha (pouco antes do ponto pelo qual desejo classificar - sendo Sn_L001_Rn) e, em seguida, classificar por essa coluna e, em seguida, unir as duas colunas juntos novamente. isso funciona, mas parece muito complicado e desajeitado. Já vi postagens sobre como criar um sistema de pontuação com o awk, mas como o meu vai chegar a pelo menos 96, isso parece demorado. também vi que o sqlite pode ser aplicável, mas também parece igualmente demorado. Peço desculpas se esta pergunta já foi feita, mas até agora não consegui encontrar um método simples para resolvê-la.

Aqui estão alguns exemplos 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    

Saída desejada:

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 adicionar mais complexidade, em uma situação em que é mais de 1 do mesmo Sn, gostaria que levasse em consideração o nome (embora eu ache que isso pode ser resolvido usando sinalizadores em sort).

Responder1

sort -t_ -k2 infileclassificará os dados usando a segunda chave com sublinhado como separador.

informação relacionada