Estou interessado no valor máximo da 5ª coluna. Mas também quero capturar o 6º e o 9º valores dessa linha em uma matriz. Como eu faço isso?
O comando abaixo tenta obter apenas o valor da 5ª coluna.
myVar=$(bash myScript.sh | awk -v max=0 '{if($5>max){max=$5;max6=$6;max9=$9}}END{print $5}')
Edit: print $5 está imprimindo o máximo da 5ª coluna.
Obrigado.
Dado um arquivo de entrada como o seguinte (não importa se os valores são positivos ou negativos, mas usar todos os negativos é um teste importante pois muitas vezes as pessoas esquecem que isso pode acontecer e escrevem scripts que assumem que pelo menos 1 valor é maior que 0 o que funciona bem durante o teste inicial e, em seguida, falha cripticamente 6 meses depois no campo com valores reais):
É assim que se imprime o 5º, 6º e 9º valores (usando
cat file
no lugar dosbash myScript.sh
quais obviamente não tenho):e se você quiser armazená-los em uma variável de shell, é mais simples armazená-los em uma matriz de shell, por exemplo, isso pode ser tudo o que você precisa, dependendo dos valores desses campos:
Se você quiser que o awk (ou qualquer outra coisa) retorne vários valores de volta para um script de shell, você deve imprimi-los no script awk e lê-los em variáveis de shell usando
read
(ou em um array de shell usandomapfile
- também conhecido comoreadarray
).BTW, já que você está usando o bash, execute
help read
ouhelp mapfile
para obter detalhes sobre eles.por exemplo, os seguintes usos
read
e substituição de processo para ler os valores em variáveis$max5
de shell$max6
, e$max9
:BTW, eu não tenho o seu,
myScript.sh
então testei com algo muito mais simples - o que também demonstra que esse método funcionará com qualquer programa ou função que produza 3 valores em uma linha, separados por espaços em branco: