Greping Carga Médias

0

Estou tentando aproveitar todas as médias de carga & coloque-os em uma matriz. Qual deve ser o caminho exato, tendo em mente os requisitos a seguir.

Definindo a matriz:

LA= ("one" "five" "fifteen")
LA= ('(uptime | grep -o '[0-9]\+\.[0-9]\+*')')

Mas o comando uptime | grep -o '[0-9]\+\.[0-9]\+*' fornece uma saída assim:

3.08
3.49
3.61

Requisito: 1. Não deve haver quebra de linha, então as médias são separadas por espaços e se encaixam na sintaxe do array.

Valores somente antes dos decimais serem enviados para variáveis de saída ou matriz.

    
por Sollosa 10.03.2018 / 12:43

1 resposta

3

Os feeds de linha não são um problema ao preencher uma matriz. Para bash , eles são apenas mais um separador de palavras nesse contexto.

Seu comando LA= ((uptime | grep -o '[0-9]\+\.[0-9]\+*')) tem dois erros:

  1. O espaço após o = . Esta é uma sintaxe válida, mas não faz o que você provavelmente espera.

    Em vez de atribuir o valor do restante da linha a $LA , ele define $LA para a sequência vazia e, em seguida, executa o restante da linha.

    Esse é um recurso útil para temporariamente substituir o valor de uma variável ambiente exportada antes de executar um comando específico. Assim que o comando sai, o valor original da variável é restaurado. por exemplo,

    $ VISUAL=/usr/bin/joe sensible-editor myfile.txt
    ....
    (exit joe)
    $ echo $VISUAL
    /usr/bin/vi
    
  2. A falta de um $ antes do segundo ( . Sem o $ , seu comando não é substituição de comando , é aritmética de shell com operandos e operadores falsos.

Tente isso:

$ LA=($(uptime | grep -Eo '[0-9]+\.[0-9]+'))
$ typeset -p LA
declare -a LA=([0]="0.97" [1]="1.23" [2]="1.39")
    
por 10.03.2018 / 13:18