Como criar um script Bash que pode procurar uma string em um arquivo e obter o valor numérico da string e comparar com outro valor

-1

Eu estava tentando criar um script bash para fazer isso

Eu tenho um arquivo de texto ...

    A saída do arquivo
  • pode não estar em uma estrutura adequada.
  • Precisa verificar se o arquivo contém uma string, test .

    Se sim, obtenha o valor numérico associado a essa string ....

    "test : 201"  
    

    compare o valor com outro número de referência 100
    100 é um valor que é uma entrada do usuário.

    if 201> 100  
    

    faça isso ..
    mais
    faça isso ..

Como posso conseguir isso?

    
por GIG 24.05.2018 / 01:57

1 resposta

4

Eu acho que você está procurando por um script de shell que pode levar dois argumentos - um nome de arquivo e um número de referência. Vamos chamar o arquivo F e o número de referência R.

Se o arquivo F contiver uma linha do formulário test : N , em que N é um número, você deseja executar alguma ação se N > R e uma ação alternativa se N < = R.

Se eu entendi o problema corretamente, este script de shell deve fazer o seguinte:

matching=$(grep "test" $1 | head -n 1 | cut -d ":" -f 2)                         
if [ -z $matching ]; then                                                        
  echo "no matching lines!" >&2                                                  
else                                                                             
  trimmed=$(echo $matching | xargs)                                              
  if [ $trimmed -gt $2 ]; then                                                   
    echo "greater"                                                               
  else                                                                           
    echo "less than or equal to"                                                 
  fi
fi

Suponha que você salve isso em um arquivo chamado myscript . Em seguida, você pode executar ./myscript input.txt 100 e se input.txt contiver uma linha como test : 52 , você verá less than or equal to ecoado na saída padrão.

Atualização: O consulente lista um cenário alternativo nos comentários, onde pode haver várias linhas correspondentes a test : n em um arquivo. O maior valor associado a test precisa ser selecionado e comparado com a referência. Basta modificar a primeira linha do script:

matching=$(grep "test" $1 | cut -d ":" -f 2 | sort -gr | head -n 1)

As linhas subsequentes são as mesmas de antes.

    
por Kartik Sabharwal 24.05.2018 / 10:30