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]