Como enviar para os usuários se a contagem gerada em um arquivo de texto não for igual a 0

0

Eu tenho uma consulta de seleção que executa e gera a contagem. Ele exporta a resposta em um arquivo de texto que tem registros abaixo, por exemplo:

Unprocessed record for A Sources
----------------------Unprocessed record count for ABC SOURCE ------------------
abc_count=            0
--------------------Unprocessed record count for CDE Source --------
CDE_count=            0
-----------------------Unprocessed record count for DEF Source -----------------
DEF_count=            0
------------------Unprocessed record count for GHI Source ----------------------
GHI_count=            56

Eu quero escrever um comando do Unix que verifique se a fonte acima da contagem não é igual a 0 e depois envie-a para a equipe desejada.

Isso é o que eu usei anteriormente, mas não está funcionando.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1) do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ] then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" [email protected]
    fi
done
    
por Vinayak Das 09.09.2017 / 11:19

2 respostas

0

Você deve adicionar uma instrução ; in if do ponto-e-vírgula antes de then e em for antes de do . Se não houver mais problemas, deve funcionar. Também não estou melhorando seu script.

O script.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1); do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ]; then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" [email protected]
    fi
done

Além disso, você não deve ter seu comando cut como cut -d"=" -f2 para obter o valor numérico? Também é melhor executar seus comandos fora do loop para ver se você obteve algum resultado ou não.

    
por 09.09.2017 / 11:33
0

Para enviar um email para [email protected] se o arquivo contiver uma atribuição de algo diferente de zero a qualquer coisa:

  1. Filtre todas as linhas com atribuições. Isso pode ser feito com grep '=' (alternativamente, 'grep' count = 'se você precisar ser mais específico).
  2. Remova linhas com zeros solitários. Isso pode ser feito com grep -v -w '0' ( -w para corresponder apenas a palavras completas, ou seja, não 10 neste caso).
  3. Atue no resultado.
if grep '=' output.txt | grep -q -v -w '0'; then
    grep '=' output.txt | grep -v -w '0' | mailx -s "Check this out!" [email protected]
fi

Para os dados da pergunta, será enviado um email contendo

GHI_count=            56

Se parecer desnecessário executar quatro greps para isso:

tmpfile=$(mktemp)
grep '=' output.txt | grep -v -w '0' >"$tmpfile"

if [ -s "$tmpfile" ]; then
    mailx -s "Check this out!" [email protected] <"$tmpfile"
fi

rm -f "$tmpfile"

O teste -s será verdadeiro se o arquivo existir e tiver um tamanho maior que zero.

    
por 09.09.2017 / 11:50