[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] validação de string
From: |
Elvio Barbalho |
Subject: |
Re: [shell-script] validação de string |
Date: |
Wed, 16 Mar 2011 12:21:26 -0300 |
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]
- validação de string, Elvio Barbalho, 2011/03/14
- Re: [shell-script] validação de string, Jose Edson Moreno Jr, 2011/03/14
- Re: [shell-script] validação de string, Elvio Barbalho, 2011/03/15
- Re: [shell-script] validação de string, Jose Edson Moreno Jr, 2011/03/15
- Re: [shell-script] validação de string,
Elvio Barbalho <=
- Re: [shell-script] validação de string, Eri Ramos Bastos, 2011/03/16
- Re: [shell-script] validação de string, Elvio Barbalho, 2011/03/16
- Re: [shell-script] validação de string, Eri Ramos Bastos, 2011/03/16
- Re: [shell-script] validação de string, Elvio Barbalho, 2011/03/16
- Re: [shell-script] validação de string, Eri Ramos Bastos, 2011/03/16
- Re: [shell-script] validação de string, Elvio Barbalho, 2011/03/16
- Re: [shell-script] validação de string, Wagner Macedo, 2011/03/16
- Re: [shell-script] validação de string, Jose Edson Moreno Jr, 2011/03/16
- Re: [shell-script] validação de string, Elvio Barbalho, 2011/03/16
Re: [shell-script] validação de string, Tiago Peczenyj, 2011/03/15