Extrai um valor particular da variável

-4

Eu quero apenas saber como extrair o valor da variável no shell script. a seguir está o código:

var=Volume: 0: 100% 1: 100% 

ou

var=Volume: 0: 35% 1: 35%  

Eu quero extrair 100 ou 35 depende de valor da variável e armazená-lo em outra variável. então como posso fazer isso?

    
por Prakash V Holkar 28.04.2014 / 13:19

3 respostas

1

Acho que este é o comando que você está procurando,

sed 's/.*\ \(.*\)%.*//g'

Exemplo:

$ echo 'var=Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*//g'
35

$ echo 'Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*//g'
35

$ var="Volume: 0: 35% 1: 35%"
$ echo $var | sed 's/.*\ \(.*\)%.*//g'
35

Este comando exibirá o primeiro número 35 ou 100 antes da primeira marca%.

    
por Avinash Raj 28.04.2014 / 13:51
3

Acho que o seu alvo está um pouco mal orientado, por isso fiz o que seria de esperar, dividir os valores em valores separados.

var="Volume: 0: 70% 1: 12%"
source <(echo "$var" | grep -oP '\d+\: \d+' | sed -r 's/([0-9]+)\: /vol=/g')

Portanto, para cada volume de entrada, existe uma variável vol# criada. Acima, echo $vol1 seria 70 e echo $vol2 forneceria 12 .

Se var="Volume: 0: 70% 1: 12% 2: 12% 3: 41% 4: 19%" , você terá cinco variáveis separadas.

    
por Oli 28.04.2014 / 14:01
0

Se:

var="Volume: 0: 100% 1: 100%"

então:

  • para extrair primeiro 100 você pode usar:

    temp=$(awk -F": |%" '{print $3}' <<< "$var")
    
  • para extrair o último 100 que você pode usar:

    temp=$(awk -F": |%" '{print $5}' <<< "$var")
    
  • para extrair os dois 100 que você pode usar:

    temp=$(awk -F": |%" '{print $3, $5}' <<< "$var")
    
por Radu Rădeanu 28.04.2014 / 13:28