shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Redirecionar para stdout e arquivo simultaneamente


From: Anderson Nascimento
Subject: Re: [shell-script] Redirecionar para stdout e arquivo simultaneamente
Date: Fri, 19 Jun 2009 11:23:11 -0300

Você pode usar o tail. Veja se te atende.

2009/6/18 Marcio Gil <address@hidden>

>
>
> Pessoal,
>
> Estou entrando agora no grupo, espero não só tirar minhas dúvidas como
> dividir o pouco conhecimento que tenho sobre shell script.
>
> Me cadastrei no grupo pois não consegui descobri se existe uma maneira de
> redirecionar a saída de um script para um arquivo e para stdout
> simultaneamente.
>
> Explicando: eu criei um script para criar um resumo dos meus arquivos de
> log (que está anexado no final da mensagem). Então eu utilizo assim:
>
> logsum -vm Cvf-*.log >Resumo.txt ; cat Resumo.txt
>
> Ou seja, ele salva o resumo em um arquivo texto e depois o exibe. Gostaria
> que as linhas fossem sendo exibidas enquanto o arquivo é criado, já que o
> processo pode demorar vários segundos quando o número de arquivos é grande.
> Não sei se esta é uma dúvida básica.
>
> A seguir eu anexei o meu script caso alguem tenha um sugestão ou queira
> aproveitar algo.
>
> --- arquivo logsum ---
>
> #!/bin/bash
> #
> # Monta resumo de arquivos de log
> # Criado por: Márcio Gil Maldonado
> #
>
> CMD=`basename $0`
>
> VER="0"
> PER="0"
> MAQ="0"
> OLD="0"
> FILES=""
> ERROR=""
>
> while [ -n "$1" ] ; do
> case "$1" in
> -*)
> if [ "$1" == "--help" ] ; then
> echo "Monta resumo de arquivos de log"
> echo
> echo "Uso:"
> echo " $CMD [opções] arquivos"
> echo
> echo "Opções:"
> echo " -v Extrai a versão do nome do arquivo"
> echo " -p Separa o período da versão (se -v foi especificado)"
> echo " -m Extrai o nome da máquina do nome do arquivo"
> echo " -o Listar campos no formato antigo"
> echo
> echo "Formato dos arquivos:"
> echo " SIGLA[-Versão]-AAMM[-Máq].log"
> echo
> echo "Campos (formato antigo, opção -o):"
> echo " [Máq] [Versão] [AAMM] data-ini data-fin n-dias n-ini n-fin n-erros"
> echo
> echo "Campos (formato novo):"
> echo " [Máq] [Versão] [AAMM] data-ini data-fin n-dias n-erros n-trav n-av"
> echo
> echo " [Máq]: Máquina (opcional)"
> echo " [Versão]: Versão ou Versão-AAMM"
> echo " [AAMM]: Período (ano e mês)"
> echo " data-ini: Data inicial"
> echo " data-fin: Data final"
> echo " n-dias: Número de dias funcionando"
> echo " n-ini: Número de inicializações"
> echo " n-fin: Número de finalizações"
> echo " n-erros: Número de erros"
> echo " n-trav: Número de travamentos"
> echo " n-av: Número de violações de acesso"
> echo
> exit 0
> fi
> OPT="$1"
> case "$OPT" in
> -*v*) VER="1"; OPT=`echo $OPT | sed s/v//`
> esac
> case "$OPT" in
> -*p*) PER="1"; OPT=`echo $OPT | sed s/p//`
> esac
> case "$OPT" in
> -*m*) MAQ="1"; OPT=`echo $OPT | sed s/m//`
> esac
> case "$OPT" in
> -*o*) OLD="1"; OPT=`echo $OPT | sed s/o//`
> esac
> if [ "$OPT" != "-" ] ; then
> ERROR="$ERROR $OPT"
> fi
> ;;
>
> *)
> FILES="$FILES $1"
> esac
> shift
> done
>
> if [ -n "$ERROR" ] ; then
> echo -en "$0: Parâmetro inválido: $ERROR\n" >&2
> echo "$0: Execute '`basename $0` --help' para mais informações." >&2
> read
> exit 1
> fi
>
> for f in $FILES ; do
> t=${f%.*}
> line=""
> if [ "$MAQ" = "1" ] ; then
> m=${t##*-}
> t=${t%-*}
> line="$m"$'\t'
> fi
> if [ "$VER" = "1" ] ; then
> v=${t#*-}
> if [ "$PER" = "1" ] ; then
> p=${v##*-}
> v=${v%-*}
> line="$line$v"$'\t'"$p"$'\t'
> else
> line="$line$v"$'\t'
> fi
> else
> p=${t#*-}
> line="$line$p"$'\t'
> fi
>
> dti=`grep "Sistema inicializado - " $f | head -n 1 | cut -f 4 -d " "`
> dtf=`grep "Sistema inicializado - " $f | tail -n 1 | cut -f 4 -d " "`
> ndd=`grep "Sistema inicializado - " $f | cut -f 4 -d ' ' | sort -mu | wc
> -l`
> nii=`grep "Sistema inicializado - " $f | wc -l`
> nff=`grep " - Sistema finalizado." $f | wc -l`
> nee=`egrep "^([0-9]+:){2}[0-9]+ - [A-Za-z]+:" $f | cut -f 3- -d ' ' | sort
> -mu | wc -l`
> nav=`egrep -i "^([0-9]+:){2}[0-9]+ - [A-Za-z]*AccessViolation[A-Za-z]*:" $f
> | cut -f 3- -d ' ' | sort -mu | wc -l`
> ntr=$(( $nii - $nff ))
>
> eval "udf=\$MAQ$m"
> declare "MAQ$m=$dtf"
> if [ "$udf" = "$dti" ] && (( $ndd > 1 )) ; then
> ndd=$(( $ndd - 1 ))
> fi
>
> if [ "$OLD" = "1" ] ; then
> echo "$line$dti"$'\t'$dtf$'\t'$ndd$'\t'$nii$'\t'$nff$'\t'$nee
> else
> echo "$line$dti"$'\t'$dtf$'\t'$ndd$'\t'$nee$'\t'$ntr$'\t'$nav
> fi
> done
>
>  
>



-- 
Anderson Raimundo
Analista de Suporte
+55 (71) 8178-5378


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]