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

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

Re: [shell-script] script pra somar bytes do home de usuarios


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] script pra somar bytes do home de usuarios
Date: Tue, 29 Aug 2006 09:50:47 -0300

use awk (na verdade um array cujo indice é uma string, nesse caso a
chave é o nome do usuario):

awk '{total[$1]+=$2} END{for(a in total){print a,total[a]} }' du.home.tmp

On 8/29/06, Roberto Alves <address@hidden> wrote:
Obrigado, Júlio mas o problema é que eu tenho um arquivo com usuários e
tamanho de arquivos em bytes e ainda não consigo somar todos os arquivos
para cada usuario.

# more du.home.tmp
admin  5
admin  1
guest   10
user9  5
user9  3
user10 4

Ou seja:
o admin teria 6; guest: 10; user9: 8 e user10: 4 em seus respectivos
somatórios mas dessa maneira a minha saída ficou assim.

Total de uso em disco do usuario admin em bytes: 0
Total de uso em disco do usuario guest em bytes: 6
Total de uso em disco do usuario user9 em bytes: 10
Total de uso em disco do usuario user10 em bytes: 8

A primeira ocorrência aparece com 0 e as seguintes com os valores errados e
a última dançou na estória.

Eu já tinha caido nesse erro também mas não consegui sair dele.

abraço,

Roberto




On 8/25/06, Julio C. Neves <address@hidden> wrote:
>
> Roberto,
> não entendi legal e por isso pode ser que a solução não seja essa. Mas
> vamos
> lá:
>
>
> #!/bin/ksh
> #  Nome : Du-home
> #  Procedimento : Verificar o uso em kbytes do fs /home por usuario
> #
> clear
>
> #du -k /home > du.home.txt
> #cat du.home.txt |cut -f3 -d/ > user.txt
> #cat du.home.txt |cut -f1 > size.txt
> #paste user.txt size.txt | sort > du.home.tmp
>
>
> usuario="a"
> BYTE=0
> BYTESUM=0
>
> while read USER BYTE
> do
>     if  [ $USER = $usuario ]
>     then
>         BYTESUM=$(($BYTESUM + $BYTE))
>     else
>
>         echo "Total de uso em disco do usuario $USER em bytes: $BYTESUM"
>         BYTESUM=$BYTE
>         usuario=$USER
>     fi
> done < du.home.tmp
>
> De qq forma, me parece que vc está usando muitos arquivos sem necessidade.
> Procure armazenar dados temporários em variáveis. Elas foram feitas para
> isso...
>
> Abração,
> Julio
> :wq
>
>
>
>
>
> 2006/8/24, Roberto Alves <address@hidden>:
>
> >
> >  Pessoal,
> > to tentando fazer um script que crie uma lista de arquivos do home de
> cada
> > usuario em uma maquina, com o du, e some os arquivos por usuario para eu
> > saber quanto cada um tá gastando de disco.
> > O script não deve ser dificil mas to errando, acho que no algoritimo.
> >
> >
> > explicacao:
> > eu criei uma lista "du.home.txt" atraves do comando "du" e tirei as
> > colunas
> > que não serviam e fiquei apenas com uma coluna de bytes e outra do nome
> do
> > arquivo com o caminho de cada um.
> > Esse arquivo limpinho com bytes e files eu chamei de du.home.tmp.
> > Quando leio esse arquivo eu tento armazenar o nome do usuario e somar
> > todos
> > os arquivos de cada user mas nao to conseguindo acertar o processo.
> > Eu comentei esses passos pra nao repetir a toda hora nos testes e fiquei
> > com
> > um arquivinho pequeno e resumido pra eu poder verificar mais facil.
> >
> > A cara dele é a seguinte:
> >
> > server1@>more du.home.tmp
> > admin  5
> > admin  5
> > guest   10
> > user9  5
> > user9  3
> >
> >
> > Alguem pode me dar uma ajuda?
> >
> >
> >
> > server1@>cat du_home.sh
> > #!/bin/ksh
> > #  Nome : Du-home
> > #  Procedimento : Verificar o uso em kbytes do fs /home por usuario
> > #
> > clear
> >
> > #du -k /home > du.home.txt
> > #cat du.home.txt |cut -f3 -d/ > user.txt
> > #cat du.home.txt |cut -f1 > size.txt
> > #paste user.txt size.txt | sort > du.home.tmp
> >
> >
> > usuario="a"
> > BYTE=0
> > BYTESUM=0
> >
> > while :
> >         read USER BYTE
> >         do
> >
> >         [ $USER != $usuario ] &&
> >           BYTESUM=$(( "$BYTESUM" + "$BYTE" ))
> >           echo "Total de uso em disco do usuario $USER  em bytes:
> > $BYTESUM"
> > ||
> >           # > saida.teste
> >
> >           BYTESUM=$(( "$BYTESUM" + "$BYTE" ))
> >           usuario=$USER
> >           echo "Total de uso em disco do usuario $USER  em bytes:
> > $BYTESUM"
> >           # >> saida.teste
> >
> >         done < du.home.tmp
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
>
> --
> Abraços,
> Julio
> http://www.julioneves.com - Um livro sobre Bash completo e on-line
> :wq
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>


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



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos










--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

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