The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Filer og datoer mastachef UNIX for dummyer Spørgsmål & svar 1 12-03-2007 02:12 PM
sammenligne datoer ... i_priyank Shell Programmering og Scripting 3 09-21-2007 01:50 AM
sammenligne datoer ragha81 Shell Programmering og Scripting 2 11-01-2006 06:17 PM
sammenligne datoer ragha81 Shell Programmering og Scripting 17 10-25-2006 06:38 PM
Mens vi taler om datoer. En anden dato spørgsmål MizzGail UNIX for dummyer Spørgsmål & svar 14 10-24-2003 08:54 AM

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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 09-01-2008
BufferExploder BufferExploder is offline
Registreret Bruger
  
 

Join Date: Sep 2008
Stillinger: 9
Awk spørgsmål: Sum datoer

Hej!

Jeg har en logfil, som har følgende opstilling:

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

Jeg ønsker at summen af "12" på de sidste 3 linjer og gemme "20" på den første linje. Det endelige resultat skal

20080812 36 20

Jeg mener, at det bør mig mere nemmere med awk? Mange tak i rådgivning.
  #2 (permalink)  
Old 09-01-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - den studerende
  
 

Join Date: Feb 2007
Location: Danmark / Bangalore / Cochin
Posts: 603
Mig ikke sikker på, om jeg får spørgsmålet korrekt, men her er den kode: jeg bare ud fra, at du vil tage det første og det tredje felter fra første linje.

Code:
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 offline Forum Advisor  
Shell programmør, forfatter
  
 

Join Date: Mar 2007
Beliggenhed: Toronto, Canada
Stillinger: 2361

Code:
awk '
 NR==1 { var1=$1; var3=$3; next }
 { var2 += $2 }
END { print var1" "var2" "var3 }' filename
Jeg formoder, at det, du virkelig ønsker, er mere kompleks end dette, hvis dette er tilfældet, vil du sandsynligvis nødt til at beskrive dit input filen mere fuldstændigt.
  #4 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Registreret Bruger
  
 

Join Date: Sep 2008
Stillinger: 9
Beklager tak for dit svar, men jeg ikke har bragt hele fil, så her er det:

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


Hvad jeg vil gøre, er summen alle $ 2 for samme dato og gemme $ 3 til denne dato. F.eks gerne en udstationeret i første post.

200808150640 0 7667

200808150640 634799861 4703
200808150640 329658775 4704
200808150640 588901581 4875


Forventet resultat:

200808150640 (634799861 +329658775 +588901581) 7667

Jeg ønsker at gøre dette for helt fil. Mange tak i rådgivning.
  #5 (permalink)  
Old 09-02-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.892
Bare gætte:
(brug nawk eller / usr/xpg4/bin/awk på Solaris)

Code:
awk 'END \
{ for (dt in third) print dt, second[dt], third[dt] }
{ if (!_[$1]++) third[$1] = $3; second[$1] += $2 }
' filename
Hvis du har brug for produktionen sorteret, pipetobak det at sortere (eller brug asorti, hvis du har GNU Awk). Eller bare bruge Perl

Code:
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

Sidst redigeret af radoulov; 09-02-2008 på 07:22 AM..
  #6 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Registreret Bruger
  
 

Join Date: Sep 2008
Stillinger: 9
Mange tak min ven fungerer som en charme.
  #7 (permalink)  
Old 09-02-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - den studerende
  
 

Join Date: Feb 2007
Location: Danmark / Bangalore / Cochin
Posts: 603
Prøv dette:

Code:
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

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 01:19 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0