awk 'BEGIN { FS=OFS="\t"; d["High"]=1; d["Medium"]=2; d["Low"]=3 } { print d[$3], $0 }' file |
sort -t $'\t' -k3,3 -k1,1n | sort -t $'\t' -s -u -k3,3 | cut -f 2-
Infelizmente, as palavras "Alta", "Média" e "Baixa" não são ordenadas alfabeticamente nesta ordem, então, ao invés disso, prefixamos cada linha com os inteiros 1, 2 e 3 para as palavras correspondentes na coluna 3. feito com o script awk
. O inteiro é separado do conteúdo original por um caractere de tabulação e indica a gravidade da doença (1 é o mais alto).
Em seguida, classificamos os dados modificados sobre a doença e neste campo inteiro, para que os registros sejam agrupados por doença e ordenados por gravidade.
Em seguida, fazemos uma "classificação única" com apenas as doenças como chave (o segundo sort
). Isso elimina qualquer doença duplicada e, para cada doença, ficamos apenas com o registro mais grave. O -s
faz com que sort
use um algoritmo de classificação estável que preserva o reordenamento de registros com chaves idênticas.
O cut
no final remove o número inteiro que adicionamos anteriormente com awk
.
O pipeline pressupõe o uso de bash
para especificar o delimitador de campo para os comandos sort
. Se bash
não for usado, insira uma única tab literal ao invés de usar $'\t'
(você pode fazer isso pressionando Ctrl + V Tab ).