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
Passando os valores para o secundário script quando invocadas pelos primário script venu_eie UNIX & avançada para usuários experientes 2 07-03-2008 08:10
Passando os valores para o secundário script quando invocadas pelos primário script venu_eie Programação Shell Script e 1 07-03-2008 07:16
criar um shell script que chama outro script e um script awk magikminox Programação Shell Script e 0 06-26-2008 03:50
me ajudar no envio de parâmetros sqlplus script para unix shell script Hara Programação Shell Script e 2 01-29-2008 03:31
Shell Script: deseja inserir valores no banco de dados quando a atualização é script é executado anel Programação Shell Script e 1 10-25-2007 04:06

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 02-11-2009
fedora fedora is offline
Usuário
  
 

Join Date: Jul 2006
Lugares: 94
como corrigir este script awk?

Eu tenho um arquivo de log enquanto olha como este

+ +
user_a blabla
nas_b blabla blabla user_d
este é um user_a
junk linha
junk outra linha
user_c nas_m blabla
+ +

basicamente a maioria das linhas contêm um "usuário" palavras-chave, eo resto das linhas não tem "usuário" em tudo.

Então eu tenho o seguinte script, que apenas extrai o usuário parte (se essa linha tem um usuário palavra-chave) de cada linha

awk '(for (i \u003d 0; i <\u003d NF; i + +)
if ($ i ~ / user /)
a \u003d $ (i)
diferente
(continua)
(print a)
) '/ Tmp / teste

e quando eu executá-lo, eu tenho o seguinte resultado

user_a
user_d
user_a
user_a #<\u003d\u003d\u003d realmente não existe um usuário na mesma linha de todo.
user_c

por que isso acontece e como posso corrigir o meu script? obrigado
  #2 (permalink)  
Old 02-11-2009
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Data: dezembro 2007
Localização: Home, de 17 de tempo de campeão mundial de Boston Celtics
Posts: 1.311
Cool

Penso que é porque você está sempre imprimir um valor. Então, você não está sobre-escrever 'a' ni o exemplo da 4 ª linha, por isso quando você imprimir a variável, você está recebendo o último valor armazenado de 'um'.
Talvez como a primeira linha ater a sua pessoa, fazer uma
Código:
a=""

em branco para fora o último 'um' valor?
  #3 (permalink)  
Old 02-11-2009
fedora fedora is offline
Usuário
  
 

Join Date: Jul 2006
Lugares: 94
Eu reliazed esse problema, mas parece que não posso resolver o problema, aqui está o script modificado

awk '(for (i \u003d 0; i <\u003d NF; i + +)
if ($ i ~ / user /)
a \u003d $ (i)
diferente
\u003d (um "não")
(Continua)
(print a)
) '/ Tmp / teste

e mudar a saída para

não
user_d
user_a
não
não

o que não é correcta em todos.


Citação:
Originally Posted by joeyg View Post
Penso que é porque você está sempre imprimir um valor. Então, você não está sobre-escrever 'a' ni o exemplo da 4 ª linha, por isso quando você imprimir a variável, você está recebendo o último valor armazenado de 'um'.
Talvez como a primeira linha ater a sua pessoa, fazer uma
Código:
a=""

em branco para fora o último 'um' valor?
  #4 (permalink)  
Old 02-11-2009
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
viciado
  
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 2.926
Com awk:


Código:
awk '{ 
  for (i=1; i<=NF; i++)
    if ($i ~ /user/)
      print $i
      }' infile

Com Perl:


Código:
perl -lne'print $1 while /(user[^\s]*)/g' infile

Com GNU grep:


Código:
grep -o 'user[^ \t]*' infile

  #5 (permalink)  
Old 02-11-2009
fedora fedora is offline
Usuário
  
 

Join Date: Jul 2006
Lugares: 94
Obrigado, eu sei, neste exemplo que dei, egrep é uma escolha melhor, mas realmente o meu trabalho real é "descobrir tanto" usuário "e" nas "parte e, em seguida, imprima o resultado.

a seguir é o resultado eu quero

+
user_a nas_b
user_d nas_b
user_a
user_c nas_m
+

Mas o problema é que, não importa o quanto eu modificado meu script, eu só não terá o resultado desejado ...

[QUOTE \u003d Radoulov; 302286540] Com awk:


Código:
awk '{ 
  for (i=1; i<=NF; i++)
    if ($i ~ /user/)
      print $i
      }' infile

Com Perl:
  #6 (permalink)  
Old 02-11-2009
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
viciado
  
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 2.926
Citação:
Originally Posted by fedora View Post
Obrigado, eu sei, neste exemplo que dei, egrep é uma escolha melhor, mas realmente o meu trabalho real é "descobrir tanto" usuário "e" nas "parte e, em seguida, imprima o resultado.

a seguir é o resultado eu quero

+
user_a nas_b
user_d nas_b
user_a
user_c nas_m
+
Eu não entendo a lógica ...
Por que user_d nas_b?
  #7 (permalink)  
Old 02-11-2009
fedora fedora is offline
Usuário
  
 

Join Date: Jul 2006
Lugares: 94
Desculpe, isso foi um erro de datilografia
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 05:41.


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