Em Qua, 26 Jun 2002 22:22:59 +0100, Ant�nio Pirro escreveu:
> Fa�a uma shell script  que some um determinado campo 
> de um ficheiro. Como par�metros a script deve receber 
> o nome do ficheiro, o caracter que separa os campos e 
> o n�mero do campo que se pretende somar.
> Ex: minhascript fich ";" 2 - a script soma o segundo 
> campo do ficheiro fich que tem como separador de 
> campos o caracter ; .
> 
> Se algu�m me puder ajudar neste quebra-cabe�as (para 
> mim), ficava agradecido.

Pelo que entendi, voc� quer um script que some todos os campos de um
mesmo arquivo e d� o resultado. Abaixo segue uma solu��o (n�o usei awk).
Espero que resolva seu "quebra-cabe�as" ;-).
--------------------------------------------------------
#!/bin/sh
# Nome do script: soma.sh
# Descricao: soma campos de arquivos
# Entrada: ./soma.sh <arquivo> <delimitador> <campo>
# Saida: valor da soma dos campos

if [ "x$1" = "x" ] || [ "x$2" = "x" ] || [ "x$3" = "x" ]; then
        echo "Uso: $0 <arquivo> <delimitador> <campo>"
        exit 1
fi

if [ -e $1 ]; then
        LINHAS=$(cat $1 | wc -l | sed "s/ //g")
        SOMA=$(expr $(cat $1 | cut -d"$2" -f$3 2>/dev/null | tr "\n" \
"+" | sed "s/\+//$LINHAS;s/\+/ \+ /g";echo) 2>/dev/null)
        if [ "x$SOMA" != "x" ]; then
                echo "$SOMA"
        else
                echo "Campos invalidos para soma ou delimitador \
invalido."
        fi
else
        echo "Arquivo $1 nao encontrado."
        exit 1
fi

# Exemplo de arquivo valido para ser utilizado:
# ---------------------------
# campo1;campo2;campo3;campo4
# campo1;campo2;campo3;campo4
# campo1;campo2;campo3;campo4
# ---------------------------
# Onde o delimitador pode ser qualquer caracter valido (que nao exista
# nos campos)
# OBS.:
# - Nao podem haver outras linhas no arquivo que nao sejam os campos
# (comentarios, por exemplo)
# - O numero de linhas do arquivo deve ser EXATAMENTE igual ao numero de
# linhas que representam os campos (ou seja, nao podem haver linhas em
# branco)
---------------------------------------------------------

-- 
Anderson Lizardo Gomes
Linux User #253643 - LFS User #4601
Site: http://adrenalinux.sytes.net/

Assinantes em 27/06/2002: 2221
Mensagens recebidas desde 07/01/1999: 172949
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a