|
From: | Humberto Pereira |
Subject: | Re: [shell-script] Ocorrência em linha |
Date: | Thu, 11 May 2006 10:48:43 -0300 |
User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060404 SeaMonkey/1.0.1 |
Hmmm,o problema deve ser algum tab que tem em vez de espaco. Troque os espacos por [:blank:]
[begnini@coke tmp]$ sed -r 's/^([^[:blank:]]+)[[:blank:]].*[[:blank:]]([0-9]+bin)[[:blank:]].*[[:blank:]]([0-9]+)$/\1 \2 \3/' a.txt
IBL 0002000010bin 2 samir 0050000004bin 50 []s Humberto Pereira Mauricy Maiorino wrote:
PessoalOlha eu de novo... estou tentando seguir esta dica do Humberto, esta perfeita até o comando "sed 's/^\([^ ]\+\) .* \([0-9]\+bin\) .*$/\1 \2/'", mas o restante não está funcionando. Se tento o restante dos comandos, eles me retornam a linha toda sem fazer nada. Detalhe: apesar de estarmos vendo neste e-mail com "várias linhas", estas linhas são apenas uma no arquivo de log real, ou seja uma linha deste "tamanho" por registro.Obrigado Mauricy Humberto Pereira escreveu:E ae pessoal, vamos lah tentar acertar esse sed. [begnini@coke tmp]$ cat a.txtIBL printer2 hppibr_[JBM05D]-BIBLIOTECA(acct=BIBL,user=BIBL,copies=2,hppibr,simplex,landscape,usletter).PCLprintsrv Apr 1 2006 02:48:53 Apr 1 2006 03:04:05 hppibr_[JBM05D]-BIBLIOTE 0002000010bin /O455.19 BIBL 2samir printer1 hpdocuprintr_ifch-I-FIL-C-HUMANAS-090000-samir(acct=ifch,user=samir,copies=50,hpdocuprintr,UsLetter,duplex,Portrait,09000000000000)--00E).PCL.PCL printsrv May 2 2006 19:00:19 May 2 2006 20:13:06 hpdocuprintr_ifch-I-FIL- 0050000004bin /O3243.36 ifch 50[begnini@coke tmp]$Existe uma linha em branco entre as duas linhas, o q nao tem linha em branco significa q eh a mesma linha.A primeira coisa q a gente quer eh o nome do usuario. Entao vamos pegar todos os caracteres do comeco da linha ateh o primeiro espaco (Isso vai funcionar como um awk ' { print $1 } ' a.txt).[begnini@coke tmp]$ sed 's/^\([^ ]\+\) .*$/\1/' a.txt IBL samirAgora nos queremos pegar o campo que tem o bin com os numeros antes (Nao vou cometer o mesmo erro da expressao passada :P). Vamos procurar por tudo q contenha numeros seguido de bin e que tenha um espaco antes.[begnini@coke tmp]$ sed 's/^\([^ ]\+\) .* \([0-9]\+bin\) .*$/\1 \2/' a.txtIBL 0002000010bin samir 0050000004binLegal, temos os 2 campos. Agora temos q pegar o penultimo campo. Veja q o ultimo campo sempre sao numeros. Entao o q tiver espaco e numero e estiver no fim da linha a gente casa.[begnini@coke tmp]$ sed 's/^\([^ ]\+\) .* \([0-9]\+bin\) .* [0-9]\+$/\1 \2/' a.txtIBL 0002000010bin samir 0050000004binNossa expressao continua funcionando. Agora basta pegar o campo anterior (qquer coisa entre espacos) e mostrar ele.[begnini@coke tmp]$ sed 's/^\([^ ]\+\) .* \([0-9]\+bin\) .* \([^ ]\+\) \+[0-9]\+$/\1 \2 \3/' a.txtIBL 0002000010bin BIBL samir 0050000004bin ifchBem, esses sao os campos que a gente precisa pegar. Um pouco trabalhoso, mas nada que ir dividindo o problema e testando passo a passo nao resolva.[]s Humberto Pereira Mauricy Maiorino wrote:BIBL tinha em outro exemplo que enviei, mas seguindo o exemplo abaixo, é uma linha por registro e a posição de cada campo é definida por estes "brancos". Isto é um log de impressão, e os nomes variam. Não sei se fui claro!!Mauricy Tiago Barcellos Peczenyj escreveu:BIBL ? onde tem BIBL nesse arquivo ? O que define a posição de cada campo nesse arquivo ? é uma linha por registro ? On 5/4/06, Mauricy Maiorino <address@hidden> wrote:Funcionou legal, agora, não querendo abusar, estou usando "vários" awk para selecionar o que preciso, porém estou vendo que com o sed acho que consigo "encurtar" o caminho. Isto vai me ajudar muito, mas o que preciso mesmo são dos campos "BIBL" (que pode variar o tamanho) o próprio campo contendo o "bin" e mais no final novamente o "BIBL" (que também pode variar), como neste outro exemplo abaixo: samir printer1 hpdocuprintr_ifch-I-FIL-C-HUMANAS-090000-samir(acct=ifch,user=samir,copies=50,hpdocuprintr,UsLetter,duplex,Portrait,09000000000000)--00E).PCL.PCL printsrv May 2 2006 19:00:19 May 2 2006 20:13:06 hpdocuprintr_ifch-I-FIL- 0050000004bin /O3243.36 ifch 50 ...onde eu precisaria dos campos "samir" "0050000004bin" "ifch" Se alguém tiver alguma idéia eu agradeço muito. Mauricy
[Prev in Thread] | Current Thread | [Next in Thread] |