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

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

Re: [shell-script] Re: Tratamento linha a linha


From: Felipe Bender
Subject: Re: [shell-script] Re: Tratamento linha a linha
Date: Thu, 16 Dec 2004 13:15:31 -0200
User-agent: Mozilla Thunderbird 0.9 (X11/20041103)

Não sei se ajuda, mas o proprio grep tem as opções -A e -B

       -A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of
              matches.

       -B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of
              matches.


ou seja:

cat arquivo | grep -B 2 [busca]

vai te retornar 2 linhas apos a ocorrencia de [busca]

e o -A 2 voltaria 2 linhas antes da ocorrencia

[]'s
Felipe Benmder


Leonardo Ayres escreveu:

Olá Gentil,

O problema é mais ou menos este sim.
É necessário incluir mesmo este trecho de código:
 for linha in `cat Teste.txt`; do
      let i++
      l[${i}]=${linha}
 done

Na verdade, eu teria um arquivo de entrada assim:

A
nome1|endereco1|telefone1
B
nome2|endereco2|telefone2
D
nome3|endereco3|telefone3
D
nome4|endereco4|telefone4
A
nome5|endereco5|telefone5
B
nome6|endereco6|telefone6

E teria que resultar um arquivo do tipo:
nome1|endereco1|telefone1|7
nome2|endereco2|telefone2|3
nome3|endereco3|telefone3|2
nome4|endereco4|telefone4|2
nome5|endereco5|telefone5|7
nome6|endereco6|telefone6|3

Onde, dependendo do que veio antes, eu coloco um código depois, que eu vou buscar na base de dados.

Acrescente a este problema, que eu tenho uma linha em branco a cada duas linhas:
A
nome1|endereco1|telefone1

B
nome2|endereco2|telefone2

D
nome3|endereco3|telefone3

D
nome4|endereco4|telefone4

A
nome5|endereco5|telefone5

B
nome6|endereco6|telefone6


--- Em address@hidden, Gentil de Bortoli Júnior <listas@b...> escreveu

Leonardo, dei uma pirada aqui. Não sei se é o que vc quer mas, de

qq
forma, pode servir como exemplo.

Veja.

$cat Teste.txt
AAA
BBB+
CCC
DDD
EEE
FFF+
GGG+
HHH
III
JJJ+
KKK

Aí fiz um script assim:

----------------------------8<----------------------------

#!/bin/bash
clear
echo "Arquivo Original"
echo "-----------------------------------------"
cat Teste.txt
echo "-----------------------------------------"
echo

codigo="+"

for linha in `cat Teste.txt`; do
    let i++
    l[${i}]=${linha}
done

echo "Arquivo Tratado"
echo "-----------------------------------------"
for linha in `seq ${i}`; do
    if [ `echo ${l[${linha}]} | grep "${codigo}"` ]; then
        echo "${l[${linha}]}"
        echo "####${l[$((${linha}+1))]}####"
    else
        echo "${l[${linha}]}"
    fi
done
echo "-----------------------------------------"

---------------------------->8----------------------------

E o resultado desse script é esse:

Arquivo Original
-----------------------------------------
AAA
BBB+
CCC
DDD
EEE
FFF+
GGG+
HHH
III
JJJ+
KKK
-----------------------------------------

Arquivo Tratado
-----------------------------------------
AAA
BBB+
####CCC####
CCC
DDD
EEE
FFF+
####GGG+####
GGG+
####HHH####
HHH
III
JJJ+
####KKK####
KKK
-----------------------------------------

Ou seja, as linhas abaixo daquelas que possuem um sinal de "+"
são mostradas entre "####".

Bom, eu não dou as melhores soluções por aqui. De repente surge

algo
bem simples, em uma linha. :)

Se precisar de alguma explicação, peça.

[]s
Gentil.

Leonardo Ayres wrote:

Pessoal,

Eu preciso tratar um arquivo linha por linha. Como eu faço isso

num
shell?

O arquivo tem numa linha, um codigo e dependendo do codigo de uma linha, eu dou um tratamento diferente à linha seguinte.






---------------------------------------------------------------------
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
---------------------------------------------------------------------
Links do Yahoo! Grupos









From (no email address) Thu Dec 16 07:09:50 2004
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (qmail 43984 invoked from network); 16 Dec 2004 15:09:49 -0000
Received: from unknown (66.218.66.218)
 by m21.grp.scd.yahoo.com with QMQP; 16 Dec 2004 15:09:49 -0000
Received: from unknown (HELO oxxy2.joinhost.com.br) (67.19.83.52)
 by mta3.grp.scd.yahoo.com with SMTP; 16 Dec 2004 15:09:49 -0000
Received: from [192.168.0.101] ([200.189.84.160])
       by oxxy2.joinhost.com.br (Exim 4.2.4 #1) with ASMTP id 5JU84344
       for <address@hidden>; Thu, 16 Dec 2004 13:08:59 -0300
Message-ID: <address@hidden>
Date: Thu, 16 Dec 2004 13:09:25 -0200
Organization: Trawtmam & Associados
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.3) 
Gecko/20040910 MultiZilla/1.6.4.0b
X-Accept-Language: pt-br, en-us, en
MIME-Version: 1.0
To: address@hidden
References: <address@hidden> <address@hidden> 
<002501c4e380$2181f2e0$address@hidden>
In-Reply-To: <002501c4e380$2181f2e0$address@hidden>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, hits=-2.51 required=15.00 
tests=USERNAME_IN_SUBJECT,BAYES_00,SMILEY,NO_RDNS2,TW_WT
        version=3.0
X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 3.0 (1.3) on oxxy2.joinhost.com.br

X-Spam Reason: X-eGroups-Remote-IP: 67.19.83.52
From: Ed Trawtmam <address@hidden>
Subject: Re: [shell-script] OFF-TOPIC ajuda no CVS
X-Yahoo-Group-Post: member; u=160820342
X-Yahoo-Profile: edtrawtmam

Salve Rafael!
Belê, estou indo prá lá!
Um abraço,
Ed Trawtmam

Rafael Quirino wrote:

aeh Ed,

Se for esse o caso. Venha p/ a lista address@hidden . Q nós o
ajudaremos com o maior prazer.
é q esse assunto já é OFF-TOPIC aqui.  E lá é o assunto mais apropriado
possível.

Mas, se é pra comunidade, a ajuda será vasta em qq lugar. Disso eu tenho
certeza. :)

[]'s ®

----- Original Message -----
From: "Ed Trawtmam" <address@hidden>
To: <address@hidden>
Sent: Quarta-feira, 15 de Dezembro de 2004 23:42
Subject: Re: RES: [shell-script] Remover usuarios sem acesso


Salvem Listeros!
Também tô dentro! De fato, estou camelando um caminhão aqui com meu
servidorzinho de e-mails... Seria uma ótima um sisteminha assim. No que
eu puder colaborar, tamos aí! Se alguém se dispuser a me ajudar a
implementar um cvs, minha máquina está à disposição da comunidade!
Um abraço,
Ed Trawtmam

Andre Pedro wrote:

Fala Julio eu to dentro!
eu nao conheco muito não, mas acompanho a lista todo o
santo dia e to estudando bastante!

acho que poderiamos pegar as pessoas que gostariam de
colaborar e tipo " dividir " as tarefas.

Acho que funcionaria legal assim..
é uma opinião minha, acho que valeria a pena!

Grande abraço

André Luis Pedro
EMPRO
EMPRESA MUNICIPAL DE PROCESSAMENTO DE DADOS
SÃO JOSÉ DO RIO PRETO - SP




--- Julio Cezar Neves - DATAPREVRJ
<address@hidden> escreveu:

---------------------------------
Proponho uma tarefa para a nossa lista. Nao sei se vcs
lembram qdo alguem
quis fazer um protetor de tela tipo matrix, que
rolaram diversas msgs na
lista e acabou saindo um proptetor de tela arretado.

Pois e, podemos fazer isso com o adm de correio. O
Marcos ja nos passou um
script para apagar usuarios inativos, porem existem
muita coisa ainda para
ser feita. O que vcs acham de adotarmos a filosofia de
desenvolvimento
cooperativo do sw livre e comecarmos com essa tarefa.

Quem sabe um colega de lista nao possa providenciar um
servidor CVS para
este fim? Reflitam sobre isso e facam sugestoes.

[ ]s,
Julio Cezar Neves
- Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden
:wq


| -----Mensagem original-----
| De: Marcos Paulo [mailto:address@hidden]
| Enviada em: quarta-feira, 15 de dezembro de 2004
11:53
| Para: address@hidden
| Assunto: Re: [shell-script] Remover usuarios sem
acesso
|
|
|
| eu uso o script abaixo, de autoria minha.
|
| os arquivos secure.mailadm e um arquivo ja criado
para
| assegurar que contas como root, e todas as contas do
sistema
| nao serao removidos.
|
| os usuarios pop sao os q tem gid = 231 que sao do
grupo popusers
| o pid eh pra evitar o cadastramento e a alteracao de
qquer
| conta pela interface web enquanto este script roda.
|
|
| qualquer duvida ou sugestao para melhorar o script
sera bem vinda.
|
| Att.
|
| Marcos
|
|
| #!/bin/sh
|
##############################################################
| ############
| #

|            #
| #

|            #
| #               SISTEMA PARA ADMINISTRACAO DO
WEBMAIL
|            #
| #     Le o diretorio de emails e verifica as contas
que nao
| sao          #
| #            acessadas em X dias, e apaga-as    #
| #

|            #
|
##############################################################
| ############
|
|
| #DEFINE AS VARIAVEIS
| dias=60
| ndir="/var/www/html/webpoint/webmail/mailadm/"
|
| tusers="${ndir}delusers.mailadm"
| nbackup="${ndir}backup/"
| tsecure="${ndir}secure.mailadm"
| pid="${ndir}pid.mailadm"
| ful="${ndir}allow.mailadm"
|
| maildir="/var/spool/mail/"
|
| #CRIA O PID
| echo "VERIFICANDO USUARIOS" > $pid
|
| #LIMPA O BACKUP
|
|
| #CRIA O ARQUIVO DE USUARIOS
| find "$maildir" -atime +"${dias}" -type f -printf
"%f X\r\n"
| | sort > $tusers
|
| if [ -s "$tusers" ]; then
|
|  while read texto
|  do
|
|   usuario=`echo $texto | cut -f1 -d" "`
|
|   pode=`grep "^${usuario}:x" $ful`
|
|   npode=`grep "^${usuario};" $tsecure`
|
|   if [ "$pode" != "" ]; then
|
|    if [ "$npode" = "" ]; then
|
|
udt="/var/database/${usuario}_pop.colegiouniversitario.com.br"
|
|     #faz backup do mail
|     if [ -s "${maildir}${usuario}" ]; then
|      tar -cPzf "${nbackup}${usuario}.tar"
"${maildir}${usuario}"
|      rm -f "${maildir}${usuario}"
|     fi
|     #faz backup do webmail
|     if [ -d "${udt}" ]; then
|      tar -cPzf "${nbackup}${usuario}_webmail.tar"
"${udt}"
|      rm -rf "${udt}"
|     fi
|
|     /usr/sbin/userdel ${usuario}
|    fi
|
|   fi
|  done < $tusers
|
|  #REMOVE O ARQUIVO DE USUARIOS
|  rm -f $tusers
| fi
|
| #REFAZ A LISTA DE USUARIOS POP
| grep -o ".*:x:[0-9]*:231:" /etc/passwd | cut -f1-2
-d":" | sort > $ful
|
| #REMOVE O PID
| rm -f $pid
|
| exit 0
|
|
|
| ----- Original Message -----
| From: Pedro Henrique Ponchio
| To: address@hidden
| Sent: Wednesday, December 15, 2004 12:13 PM
| Subject: RE: [shell-script] Remover usuarios sem
acesso
|
|
|
| Ola Diniz,
|
| Na verdade nao e a data de modificacao (que se ve
como
| comando ls -la) mas sim a data do ultimo ACESSO ao
arquivo
| (feito pelo usuario). Portanto o comando (ls -la
| --time=access) te dara quando foi o ultimo acesso do
usuario
| ao arquivo mail. basta filtrar por data pra saber
quando foi
| o ultimo acesso ao email de cada usuario.
|
| Abraco
| PH
|
| -----Original Message-----
| From: Diniz Alexandre Daminelli
[mailto:address@hidden]
| Sent: Tue 14/12/2004 21:16
| To: address@hidden
| Cc:
| Subject: Re: [shell-script] Remover usuarios sem
acesso
|
|
|
|
| O que faz este comando?
| <ls -la --time=access /var/mail>
|
| na saida simplesmente me mostrou a listagem do
diretorio...e
| isso mesmo?
|
| outras coisa...se sua ideia era pegar a data da
ultima modificacao do
| arquivo,....acho que isso nao funcionara, pois cada
vez que o
| usuario recebe
| um e-mail a data e atualizada...assim vai demonstrar

| erronhamente que ele
| esta checando seus e-mail's, mas o que esta
acontecendo na
| verdade e que ele
| esta recebendo, mas nao necessariamente checando
seus e-mail's.
|
| []'s
| Diniz
|
|
| [As partes desta mensagem que nao continham texto
foram removidas]
|
|
|
|
---------------------------------------------------------------------
| Esta lista nao admite a abordagem de outras
liguagens de
| programacao, como perl, C etc. Quem insistir em nao
seguir
| esta regra sera moderado sem previo aviso.
|
---------------------------------------------------------------------
| Sair da lista:
address@hidden
|
---------------------------------------------------------------------
| Esta lista e moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------

Links do Yahoo! Grupos










[As partes desta mensagem que nao continham texto
foram removidas]



---------------------------------------------------------------------
Esta lista nao admite a abordagem de outras liguagens
de programacao, como
perl, C etc. Quem insistir em nao seguir esta regra
sera moderado sem previo
aviso.
---------------------------------------------------------------------
Sair da lista:
address@hidden
---------------------------------------------------------------------
Esta lista e moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------

Links do Yahoo! Grupos









---------------------------------------------------------------------
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
---------------------------------------------------------------------



Yahoo! Grupos, um serviço oferecido por:

                         function SearchComboBox() {
if (document.form_combo.keyword.value.length==0){
alert("Por favor, digite algo.");  return false; }else
{  document.form_combo.action
="http://br.rd.yahoo.com/SIG=12ad5uloe/M=264105.3931087.6562589.1588051/D=b
rclubs/S=2137111254:HM/EXP=1103210991/A=2361264/R=0/SIG=11uaou2jn/*http://ww
w.bondfaro.com/bondfaro/in/combosearch_in.jsp?sk=11";
} return true;}
[input]
    [input]                [input]


---------------------------------
Links do Yahoo! Grupos

 Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/

 Para sair deste grupo, envie um e-mail para:
address@hidden

 O uso que você faz do Yahoo! Grupos está sujeito
aos Termos do Serviço do Yahoo!.






_______________________________________________________
Yahoo! Mail - Agora com 250MB de espaço gratuito. Abra
uma conta agora! http://br.info.mail.yahoo.com/


---------------------------------------------------------------------
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
---------------------------------------------------------------------

Links do Yahoo! Grupos











---------------------------------------------------------------------
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
---------------------------------------------------------------------

Links do Yahoo! Grupos











---------------------------------------------------------------------
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
---------------------------------------------------------------------

Links do Yahoo! Grupos











reply via email to

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