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
Arquivos e datas mastachef UNIX para Dummies Perguntas & Respostas 1 12-03-2007 02:12
comparar datas ... i_priyank Programação Shell Script e 3 09-21-2007 01:50
comparar datas ragha81 Programação Shell Script e 2 11-01-2006 06:17
comparando datas ragha81 Programação Shell Script e 17 10-25-2006 06:38
Enquanto estamos no assunto de datas. Outra questão data MizzGail UNIX para Dummies Perguntas & Respostas 14 10-24-2003 08:54

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 09-01-2008
BufferExploder BufferExploder is offline
Usuário
  
 

Join Date: Sep 2008
Posts: 9
Awk pergunta: Soma datas

Oi lá,

Tenho um logfile que tem o seguinte esquema:

20080812 0 20
20080812 12 10
20080812 12 10
20080812 12 10

Quero soma o "12" sobre os últimos 3 linhas e salvar os "20" na primeira linha. O resultado final deve ser

20080812 36 20

Acho que deveria me mais fácil com awk? Muitos agradecimentos no conselho.
  #2 (permalink)  
Old 09-01-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
DJ - o aluno
  
 

Join Date: Feb 2007
Local: Singapura / Bangalore / Cochin
Posts: 610
Não estou certo se eu começo a questão de forma adequada, mas aqui está o código: Eu presumo que você irá tomar o primeiro eo terceiro campos da primeira linha.


Código:
awk 'BEGIN {sum=0; } {if (NR==1){ var1=$1; var3=$3;}  sum += $2; } END { print var1" "sum" "var3 }' filename

  #3 (permalink)  
Old 09-02-2008
cfajohnson's Avatar
cfajohnson cfajohnson is online now Forum Advisor  
Shell programador, autor
  
 

Join Date: Mar 2007
Localização: Toronto, Canadá
Mensagens: 2.380


Código:
awk '
 NR==1 { var1=$1; var3=$3; next }
 { var2 += $2 }
END { print var1" "var2" "var3 }' filename

Desconfio que o que realmente queremos é mais complexa do que isso, Se assim for, provavelmente você tem que descrever o seu arquivo de entrada mais completa.
  #4 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Usuário
  
 

Join Date: Sep 2008
Posts: 9
Sinto muito obrigado pelas suas respostas, mas eu não colocar todo o arquivo então aqui está:

200808260640 0 11383
200808210640 0
200808300640 0
200808300640 0
200808300640 0
200808260640 336528522 8844
200808260640 724271039 8080
200808260640 583502861 8077
200808210640 0
200808210640 0
200808210640 0
200808290640 0
200808290640 0
200808290640 0
200808290640 0
200808150640 0 7667
200808160640 0 3285
200808310640 0
200808150640 634799861 4703
200808150640 329658775 4704
200808150640 588901581 4875
200808160640 201718658 1424


O que eu quero fazer é soma todos os US $ 2 para a mesma data, e salve a 3 dólares para essa data. Por exemplo, como um destacado no primeiro posto.

200808150640 0 7667

200808150640 634799861 4703
200808150640 329658775 4704
200808150640 588901581 4875


Resultado esperado:

200808150640 (634799861 +329658775 +588901581) 7667

Eu quero fazer isto para o inteiramente arquivo. Muitos agradecimentos no conselho.
  #5 (permalink)  
Old 09-02-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
viciado
  
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 2.926
Just guessing:
(uso nawk / ou usr/xpg4/bin/awk no Solaris)


Código:
awk 'END \
{ for (dt in third) print dt, second[dt], third[dt] }
{ if (!_[$1]++) third[$1] = $3; second[$1] += $2 }
' filename

Se você precisar de saída seleccionadas, para classificá-la pipe (ou utilizar asorti se tiver GNU Awk). Ou é só usar Perl


Código:
perl -ane'
  $third{$F[0]} = $F[2] unless $x{$F[0]}++;
  $second{$F[0]} += $F[1];
  print map "$_ $second{$_} $third{$_}\n", sort keys %x
    if eof' filename


Última edição por radoulov, em 09/02/2008 07:22..
  #6 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Usuário
  
 

Join Date: Sep 2008
Posts: 9
Muito obrigado meu amigo trabalha como um encanto.
  #7 (permalink)  
Old 09-02-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
DJ - o aluno
  
 

Join Date: Feb 2007
Local: Singapura / Bangalore / Cochin
Posts: 610
Tente este:


Código:
for each in $(cut -c1-8 filename | sort -u)
        do
        awk '/^'$each'/{ if ($2==0){ var1=$1;var3=$3;} sum+=$2; }END { print var1" "sum" "var3;}' filename
        done

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 11:40.


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