Compare os números no arquivo de texto, se atende a condição executar um script de shell

2

Eu tenho um arquivo de texto (criado por um script) que contém apenas números em uma única linha, como "5 17 42 2 87 33". Eu quero verificar cada número com 50 (exemplo), e se algum desses números for maior que 50, eu quero executar outro script de shell. Estou usando um programa vumeter, meu objetivo é executar um programa de reconhecimento de som se o nível de ruído for alto. Então, eu só quero determinar um limite.

    
por Selim Turkoglu 21.11.2018 / 18:19

4 respostas

0

Usando awk :

awk '{ for(i = 1; i <= NF; i++) if($i > 50) { system("bash /other/shell/script.sh") } }' file.txt

Usando um script bash:

#!/bin/bash

file=/path/to/file.txt

for num in $(<"$file"); do
    if ((num>50)); then
        bash /other/shell/script.sh
    fi
done

Isso fará um loop em cada número em file.txt e verificará se esse número é maior que 50 e, em seguida, executará o script fornecido. No entanto, isso pode ser um problema ou desnecessário; Se houver vários números em seu arquivo de texto maiores que 50, você deve executar seu script várias vezes?

    
por 21.11.2018 / 18:26
1

Como uma função de aceitação de parâmetro e input como o nome do arquivo codificado:

greaterthan() (
  threshold=$1
  set -- $(< input)
  for arg
  do
    if [ "$arg" -gt "$threshold" ]
    then
      echo execute other shell script
      break
    fi
  done
)

Escreva ou crie um script e chame-o como greaterthan 50 ou o número que desejar.

    
por 21.11.2018 / 18:39
1

Você pode usar dc:

dc -f lefile -e '
  [ c                                         # clear the stack
  ! xmessage "a number is greater than 50" &  # pop up a message
  ] sr
  [ 50 <r                                     # if a number > 50 execute macro r
  z 0 <t                                      # if stack not empty execute macro t
  ] st
  lt x
'
    
por 21.11.2018 / 23:13
0

Você pode dividir o arquivo em linhas e pesquisar linhas que correspondam a números maiores ou iguais a 50:

fmt -w1 | egrep -q '(\d\d\d|[5-9]\d)(\..*)?' && sh other_script.sh

A primeira cláusula entre parênteses em regexp procura pelo menos três dígitos, ou dois dígitos começando com um '5'. A segunda cláusula permite um ponto decimal de opção e qualquer sufixo.

Use a opção -q para suprimir a saída normal, porque queremos apenas o status de saída.

    
por 21.11.2018 / 18:50