Eu tenho uma matriz assim:
array=(1 2 7 6)
e gostaria de procurar o segundo maior valor, com a saída sendo
secondGreatest=6
Existe alguma maneira de fazer isso no bash?
Eu tenho uma matriz assim:
array=(1 2 7 6)
e gostaria de procurar o segundo maior valor, com a saída sendo
secondGreatest=6
Existe alguma maneira de fazer isso no bash?
Imprima cada valor do array em sua própria linha, classifique-o, obtenha os últimos 2 valores, remova o último valor
Defina esse valor para a
secondGreatest
variável.Glenn Jackman tinha um excelente argumento sobre números duplicados que não considerei. Se você se importa apenas com valores exclusivos, você pode usar o
-u
sinalizador de classificação:Um loop específico do bash através do array poderia fazer isso; você tem que acompanhar o maior e o segundo maior. A única outra parte complicada é ter cuidado ao inicializar esses valores; o maior valor é inicializado no primeiro elemento; o segundo maior valor é inicializado na primeira vez que vemos um valor menor que o maior valor. Posteriormente, para o segundo maior valor, só o atualizamos se for estritamente menor que o maior valor atual:
Ainda é mais lento do que chamar
sort
, mas tem o benefício adicional de escolher o segundo maior valor estritamente menor em face de vários valores altos (como7
e7
acima).É um bom trabalho para dc: