![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
||||
|
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
|
|
||||
|
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. |
|
|||||
|
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.. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|