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

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

Re: [shell-script] validação de string


From: Eri Ramos Bastos
Subject: Re: [shell-script] validação de string
Date: Wed, 16 Mar 2011 14:50:59 -0300

E isso?

$ cat arquivo.txt |tr "\n" " "|tr -s " "|grep  "set control n"

[]'s
Eri Ramos Bastos

2011/3/16 Elvio Barbalho <address@hidden>:
> Oiiii, Jose Edson a abordagem
>
> awk -F'\n' '{printf $0" "} END {printf "\n"}' arquivo.txt | grep "set
> control n" | awk -F'set control n' '{print NF - 1}'
>
>  funcionou perfeitamente para arquivos pequenos. para um  arquivo maior deu
> o seguinte erro.
>
> awk: record `0010* --------------...' too long
>
> já a segunda
>
> grep -A 1 -B 1 control arquivo.txt | awk -F'\n' '{printf $0" "} END {printf
> "\n"}' | sed "s/set control n/\nset control n\n/g" | grep "set control n" |
> wc -l
>
> não funciona aqui pois na versão do grep no Unix que estou usando não possui
> todas essas opções ai.
>
> segue um exemplo de arquivo que deu problema no too long.
>
> 0010* ----------------------------------------------------------------------
> 0020* STARTUP SO SISTEMA DE GERENCIAMENTO DE MANUTENCAO PREDIAL
> 0030* ANALISTA:  YARLE - MAI/2000 - ITI-1
> 0040* AAP50000
> 0050* MANUTENCAO:
> 0060* ---------------------------------------------------------------------
> 0070DEFINE DATA LOCAL USING AAP5NIS
> 0080LOCAL
> 009001 #NOME-TITULO  (A50)
> 010001 #VERSAO       (A1/2)
> 0110INDEPENDENT
> 012001 +NOME-SISTEMA (A50)
> 013001 +PGM-NAT      (A8)
> 014001 +START        (A01)
> 0150END-DEFINE
> 0160*
> 0170FETCH RETURN 'AAP5900S' /* CARREGA INDEPENDENTES E FUNCOES USUARIOS
> 0180*
> 0190IF *DEVICE = 'BATCH'
> 0200   WRITE *PROGRAM 'PROCESSAMENTO BATCH - DESVIO PROGRAMADO'
> 0210   STOP
> 0220END-IF
> 0230*
> 0240***********************************************************
> 0250* IF NOT(*USER = 'R16484' OR= 'BMAN000R' OR= 'R23000' OR= 'N60484')
> 0260*   SET CONTROL 'WL49C18B04/18F'
> 0270*   INPUT '                 ATENCAO' (I)
> 0280*     // 'ESTE SISTEMA ESTARA INDISPONIVEL A PARTIR'
> 0290*     // 'DE 18:00 HORAS DO DIA 28/06 (SEXTA-FEIRA)'
> 0300*     // 'COM RETORNO PREVISTO PARA AS 08:00 HORAS'
> 0310*     // '  DO DIA 03/07 (QUARTA-FEIRA), PARA SUA '
> 0320*     // '     ADEQUACAO AO PADRAO MULTI-ESTADO.'
> 0330*    /// '                         PF12-SAI     '
> 0340*   SET CONTROL 'WB'
> 0350*
> 0360*   TERMINATE
> 0370* END-IF
> 0380***********************************************************
> 0390FORMAT PS=60 LS=132
> 0400*
> 0410SET KEY PF1 PF2 PF3 PF4 PF5 PF6 PF7 PF8 PF9 PF10 PF11 PF12 = PGM
> 0420*
> 0430MOVE '                  MENU PRINCIPAL          ' TO #NOME-TITULO
> 0440MOVE *PROGRAM                                     TO NIS-PROGRAMA
> 0450                                                     NIS-PROG-RETORNO
> 0460RESET #VERSAO(*)
> 0470*
> 0480IF +START NE '1'
> 0490    MOVE '1' TO +START
> 0500    IF +PGM-NAT = 'NATBATES'
> 0510       INPUT USING MAP 'AAP5000C'
> 0520       IF *PF-KEY = 'PF11'
> 0530          FETCH 'MAN0PFT1'
> 0540       END-IF
> 0550       IF #VERSAO(1) NE 'X' AND #VERSAO(2) NE 'X'
> 0560          REINPUT 'Marque um <X> na opcao desejada' MARK *#VERSAO(1)
> 0570       END-IF
> 0580       IF #VERSAO(1) NE ' ' AND #VERSAO(2) NE ' '
> 0590          REINPUT 'Selecione somente uma opcao' MARK *#VERSAO(1)
> 0600       END-IF
> 0610       IF #VERSAO(1) = 'X'
> 0620          STACK TOP COMMAND 'AAP1100P'
> 0630          STACK TOP COMMAND 'LOGON PREDIO'
> 0640          STOP
> 0650       ELSE
> 0660          IF NOT(+TAB-FUNCAO(1) = 1 OR +TAB-FUNCAO(2) = 1)
> 0670            REINPUT
> 0680      'Aplicacao restrita inicialmente a usuarios master ou sub-master'
> 0690            ALARM
> 0700          END-IF
> 0710       END-IF
> 0720   END-IF
> 0730    INPUT USING MAP 'AAP5000B'
> 0740    IF *PF-KEY = 'PF11'
> 0750       FETCH 'MAN0PFT1'
> 0760    END-IF
> 0770END-IF
> 0780*
> 0790INPUT USING MAP 'AAP5000A'
> 0800PERFORM NAVEGACAO-NIS
> 0810* ----------------------------------------------------------------------
> 0820DEFINE SUBROUTINE NAVEGACAO-NIS
> 0830* ----------------------------------------------------------------------
> 0840MOVE LEFT NIS-COMANDO TO NIS-COMANDO
> 0850*
> 0860DECIDE FOR FIRST CONDITION
> 0870  WHEN *PF-KEY = 'PF1'
> 0880    REINPUT USING HELP MARK *NIS-COMANDO
> 0890  WHEN *PF-KEY = 'PF10'
> 0900    STACK COMMAND 'RETURN'
> 0910    STOP
> 0920  WHEN *PF-KEY = 'PF11' OR NIS-COMANDO = '.'
> 0930    FETCH 'MAN0PFT1'
> 0940  WHEN *PF-KEY = 'PF12'
> 0950    CALL 'LOGOFF'
> 0960  WHEN NIS-COMANDO NE ' '
> 0970    CALLNAT 'NISV2' NIS-PARAMETROS
> 0980  WHEN NONE
> 0990    REINPUT 'INFORME CODIGO DA FUNCAO OU COMANDO DIRETO VALIDOS'
> 1000      ALARM
> 1010END-DECIDE
> 1020END-SUBROUTINE
> 1030* ----------------------------------------------------------------------
> 1040END
>
>
> Elvio Barbalho
> Brasília, DF
> Brasil
>
> C + 55 11 82696525
> C + 55 61 81751213
> address@hidden
>
>
>
>
> Em 15 de março de 2011 20:23, Jose Edson Moreno Jr
> <address@hidden>escreveu:
>
>> Oi Elvio,
>>
>>    Bom imagino que queira contar o numero de ocorrencia "set control n",
>> uma maneira seria pegar parte da palavra que esta contida na string e contar
>> o numero de ocorrencia, algo como :
>>
>> grep control arquivo.txt | wc -l
>>
>>    Porém isto somente funcionaria se esta palavra somente ocorresse na
>> string, uma outra maneira seira fazer a contagem de campos apos a
>> normalizacao, ou em outras palavras a eliminação do final de linha, assim :
>>
>> awk -F'\n' '{printf $0" "} END {printf "\n"}' arquivo.txt | grep "set
>> control n" | awk -F'set control n' '{print NF - 1}'
>>
>>    Supondo, que seu arquivo contenha centenas de variações e no meio esta
>> string , uma maneira de tratar para não ficar uma linha enorme seria assim :
>>
>> grep -A 1 -B 1 control arquivo.txt | awk -F'\n' '{printf $0" "} END {printf
>> "\n"}' | sed "s/set control n/\nset control n\n/g" | grep "set control n" |
>> wc -l
>>
>>   Como vê, existe diversa maneiras de ataca o problema, somente é
>> necessário ver qual será o tipo de restrição, talves, tenha ate outra
>> maneiras mais simples, mas seria uma real analise do arquivo que contera a
>> ocorrencia, os modos que pode ocorrer e assim determinar um meio mais fácil
>> ... mas acredito que estas maneiras devam atender a sua necessidade (a
>> ultima é uma melhoria do que já passei para você e muito mais abrangente) ..
>> Att.
>>
>> Edson
>>
>> Em 15 de março de 2011 11:36, Elvio Barbalho <address@hidden>escreveu:
>>
>>>
>>>
>>> Jose Edson bom dia sua dica funcionou, entretanto depois deparei me com
>>> outro problema preciso contar o número de ocorrências desta string e
>>> utilizando o grep em conjunto com o wc -l sempre retorna 1 pois temos
>>> mente
>>> uma unica linha. Se puder ajudar agradeço.
>>>
>>>
>>> Elvio Barbalho
>>> Brasília, DF
>>> Brasil
>>>
>>> address@hidden
>>>
>>> Em 14 de março de 2011 13:19, Jose Edson Moreno Jr
>>> <address@hidden>escreveu:
>>>
>>>
>>> > Bom dia Elvio,
>>> >
>>> > Normalize a entrada e depois faça o teste , um meio de fazer isso :
>>> >
>>> > awk -F'\n' '{printf $0" "} END {printf "\n"}' /arquivo.txt | grep "set
>>> > control n"
>>> > if [ $? -eq 0 ]; then
>>> > echo "String OK "
>>> > fi
>>> >
>>> > agora se deseja utilizar regex, segue a regex para o seu padrão :
>>> > (set)[\ |\n](control)[\ |\n]n
>>> >
>>> > Att.
>>> >
>>> > Em 14 de março de 2011 11:18, Elvio Barbalho <address@hidden
>>> > >escreveu:
>>> >
>>> > >
>>> > >
>>> > > Bom dia senhores, tenho que validar uma determinada string dentro de
>>> um
>>> > > arquivo, até ai nada complicado.
>>> > >
>>> > > A string a ser validada é essa "set control n" entretanto ela pode ter
>>> > > algumas variações por exemplo:
>>> > >
>>> > > set control
>>> > > n
>>> > > ----------------------------
>>> > > set
>>> > > control n
>>> > > ----------------------------
>>> > > set
>>> > > control
>>> > > n
>>> > > ----------------------------
>>> > >
>>> > > como podemos ver parte dessa string pode ou não estar em outra linha
>>> > dentro
>>> > > do arquivo, mas necessariamente seguindo essa ordem ai.
>>> > >
>>> > > Poderiam me ajudar a criar um expressão regular para verificar se essa
>>> > > string esta ou não presente dentro do arquivo?????
>>> > >
>>> > > Elvio Barbalho
>>> > > Brasília, DF
>>> > > Brasil
>>> > >
>>> > > address@hidden
>>> > >
>>> > > [As partes desta mensagem que não continham texto foram removidas]
>>> > >
>>> > >
>>> > >
>>> >
>>> >
>>> >
>>> > --
>>> > Jose Edson Moreno Jr.
>>>
>>> >
>>> >
>>> > [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
>>>
>>> >
>>> >
>>> >
>>>
>>> [As partes desta mensagem que não continham texto foram removidas]
>>>
>>>
>>>
>>
>>
>>
>> --
>> Jose Edson Moreno Jr.
>>
>
>
> [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
>
>
>


reply via email to

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