The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Shell script para extração de um arquivo texto vignesh53 Programação Shell Script e 3 02-05-2008 08:16
Relatório baseado na extração arquivo Data gama Ganapati Programação Shell Script e 2 07-13-2006 12:26
data de extracção a partir de um arquivo em ksh homer_hn Programação Shell Script e 6 04-21-2006 02:51
precisam de ajuda anexando linhas / combinando linhas dentro de um arquivo ... mr_manny Programação Shell Script e 2 01-06-2006 06:45
ajudar no processo extração apalex UNIX para Dummies Perguntas & Respostas 1 05-01-2001 11:29

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-27-2008
srsahu75 srsahu75 is offline
Usuário
  
 

Join Date: Jan 2008
Lugares: 15
Extracção de várias linhas de um arquivo hugh

Caros colegas,
Tenho um enorme arquivo gerado pelo comando "whois" para centenas de IPs. Cada seção do arquivo começa com [Busca Whois

Gostaria de extrair as linhas que começam com qualquer uma destas palavras: [Busca whois, OrgName, NetRange, inetnum, descr, o proprietário, o País na mesma secção.

Entrada:

[Busca whois.XJHIOUIIOOPIOP]


OrgName: Universidade de C
OrgID: U1
Endereço: OIT
Endereço: NH
Cidade: BC
StateProv: XY
CEP: 000000
País: MN

NetRange: XXX.YYY.MN - XXX.YYY.MQ
CIDR: LMANERIE
NetName: UC


[Busca whois.ABCE.TSD]

% Direitos restringidos por direitos autorais.
Ver%

% Nota: Esta saída foi filtrada.
Para receber% da produção para uma atualização de dados, use o "-B" flag


inetnum: XXX.YYY.MN - XXX.YYY.MQ
netname: NET-C
descr: MP
descr: A Universidade
país: PQ
admin-c: Tye
tech-c: SDF
estado: FGRG
mnt-by: FSDGFG
fonte: FGDFSG

papel: OPRROKROTR
Endereço: A Universidade
endereço: DJFIEJRE
endereço: DIJAIRJEJ
endereço: EIREROERE

Necessário saída:

[Busca whois.BUHIOUJIOU]
OrgName: HHHHHHHHHH (pode ou não presente)
NetRange: TTTTTTTTT (pode ou não presente)
inetnum: FTYFYYYUII (pode ou não presente)
descr: HIJKJKLLKL (Será melhor se apenas primeira ocorrência)
proprietário: JHKJOJOIPI (pode ou não presente)
País: OIOPOPOP (1 ª ocorrência)

Obrigado
No que diz respeito
  #2 (permalink)  
Old 04-27-2008
era era is offline Forum Advisor  
Herder do Inútil Gatos (On Sabático)
  
 

Join Date: Mar 2008
Localização: / lá / é / só / bin / sh
Posts: 3.652
Diferentes registradores utilizam diferentes formatos de saída. Portanto, a menos que você esteja pesquisando um conjunto muito limitado de domínios, por exemplo, todos os domínios registrados por uma pessoa, ou por outras razões todos os inscritos no mesmo registo, ou apenas um pequeno conjunto de registradores, isto pode revelar-se mais complexa do que você pensou .

Talvez fosse útil como um primeiro passo para separar as entradas de arquivos diferentes dependendo do [Busca ... linha? Experimente o csplit comando para isso. Então, você pode criar um parser para cada um dos formatos que você encontrar lá dentro.

Como você sabe quando parar? Muitas vezes, um recorde que incluirá hierárquica informação (especialmente para a ARIN informação, que é o seu aspecto de ABCE.TSD exemplo), na qual o posterior linhas são mais específicos do que os anteriores. Então muitas vezes você deseja que o linhas mais tarde, e não os anteriores. (Mas isso depende do que você precisa para este, naturalmente.)

Enfim, aqui vai uma tentativa de aplicar o seu actual spec. Isto simplesmente escolhe o primeiro de alguma coisa após a Busca linha:

Código:
perl -ne 'if (/^\[Querying/) {
  print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
  $wanted = &wanted(@wanted);
}
sub wanted {
  return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
if ($wanted && $_  =~ m/$wanted/i) {
  print;
  @wanted = grep { $_ ne $1 } @wanted;
  $wanted = @wanted ? &wanted(@wanted) : "";
}' file
Este saiu um pouco mais monstruosa do que eu gostaria que fosse, mas talvez você possa usá-lo como um ponto de partida.

(Em retrospectiva, talvez teria sido melhor usar um hash para manter controle dos valores que já são capturados, e não se capturar o hash diz que já temos o que estamos a olhar para um. Empurre a capturou aqueles que se preservar um array ordem é importante.)

Última edição por época; em 04/27/2008 08:53.. Motivo: Adicionar / i bandeira para fazer correspondência ignorar caso
  #3 (permalink)  
Old 04-29-2008
srsahu75 srsahu75 is offline
Usuário
  
 

Join Date: Jan 2008
Lugares: 15
Oi,
Muito obrigado pela ajuda. O script é muito útil até 70% da minha necessidade. Vou tentar fazer alguma coisa para o resto dos meus 30%.

Obrigado
No que diz respeito
Satya
  #4 (permalink)  
Old 05-05-2008
srsahu75 srsahu75 is offline
Usuário
  
 

Join Date: Jan 2008
Lugares: 15
Caro Era,
Quero que o script deve ter o ficheiro de entrada como uma variável, bem como arquivo de saída. Tenho dois arquivos texto: (1) Lista de pastas em que o script deve trabalho (2) Lista de ficheiros de entrada, em que o script deve funcionar.
Devido à falta de Perl conhecimento Tentei vencida. No shell script eu uso:

para i em `(gato countries.txt)»
fazer

para j em `(gato year.txt)»

fazer

para k em `(gato países / $ i / $ j)»

fazer



Mesma maneira que eu quero o perl script tomar as inputfile como variável

Obrigado
  #5 (permalink)  
Old 05-05-2008
era era is offline Forum Advisor  
Herder do Inútil Gatos (On Sabático)
  
 

Join Date: Mar 2008
Localização: / lá / é / só / bin / sh
Posts: 3.652
Por uma questão de estilo concha codificação, os parênteses são completamente desnecessárias, e outras coisas no backticks funciona mal, se há um nome de arquivo com espaços nele.

Não vejo por que você não pode usar esse script para embrulhar o Perl código, não há nada mais há que Perl faz melhor do que o reservatório, com excepção de não ter de ler o arquivo país uma e outra vez (mas você pode otimizar que, no shell script, também). Mas de qualquer maneira, aqui vai. Eu tenho medo isso é completamente testado.

Código:
#!/usr/bin/perl

die "Usage: $0 dir yearfile countryfile" unless (@ARGV == 3);

open (Y, "$ARGV[1]") || die "$0: Could not open $ARGV[1]: $!\n";
open (C, "$ARGV[2]") || die "$0: Could not open $ARGV[2]: $!\n";
my @countries = <C>;
close C;
while ($year = <Y>) {
  for $country (@countries) {
    handle ("$ARGV[0]/$year/$country");
  }
}
close Y;

sub handle {
  my ($file) = @_;
  open (F, $file) || die "$0: Could not open $file: $!\n";
  while (<F>) {
    if (/^\[Querying/) {
      print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
      $wanted = &wanted(@wanted);
    }
    if ($wanted && $_  =~ m/$wanted/i) {
      print;
      @wanted = grep { $_ ne $1 } @wanted;
      $wanted = @wanted ? &wanted(@wanted) : "";
    }
    close F;
  }
}  
sub wanted {
  return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
  #6 (permalink)  
Old 05-07-2008
srsahu75 srsahu75 is offline
Usuário
  
 

Join Date: Jan 2008
Lugares: 15
Muito obrigado pelo código

Atenciosamente
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 10:53.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0