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 infile
classificará os dados usando a segunda chave com sublinhado como separador.