Classificando um arquivo baseado em uma coluna usando Unix e Awk

5

Eu preciso classificar o arquivo de entrada de acordo com a sexta coluna, que é a pontuação.

Arquivo de entrada:

Sc2/80  20 . A T 86 Pass N=2 F=5;U=4
Sc2/80  20 . A C 80 Pass N=2 F=5;U=4
Sc2/60  55 . G T 90 Pass N=2 F=5;U=4
Sc2/60  55 . G C 99 Pass N=2 F=5;U=4
Sc2/20  39 . C T 97 Pass N=2 F=5;U=4
Sc2/20  39 . C A 99 Pass N=2 F=5;U=4

Resultado esperado:

Sc2/20 39 . C T 97 Pass N=2 F=5;U=4
Sc2/20 39 . C A 99 Pass N=2 F=5;U=4
Sc2/60 55 . G T 90 Pass N=2 F=5;U=4
Sc2/60 55 . G C 99 Pass N=2 F=5;U=4
Sc2/80 20 . A T 86 Pass N=2 F=5;U=4
Sc2/80 20 . A C 80 Pass N=2 F=5;U=4

Lógica: Todas as linhas pares do arquivo de entrada devem ser comparadas e classificadas de acordo com a pontuação (Ordem Decrescente) e a linha ímpar correspondente do arquivo deve ser impressa também com ele. Se qualquer uma das pontuações (das linhas pares) for igual, então precisamos olhar para a pontuação da linha ímpar correspondente e, portanto, a pontuação mais alta tem prioridade e é impressa primeiro.

    
por Namrata 07.08.2013 / 10:45

1 resposta

7

Uma solução possível é reunir cada uma das duas linhas, classificar e dividir novamente as linhas unidas

awk '{ getline line; print $0, line }' input_file | 
    sort -k6,6nr -k15,15nr | 
    awk '{ $10 = "\n" $10; print }'
    
por 07.08.2013 / 11:03