The UNIX and Linux Forums  

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
I file e le date mastachef UNIX for Dummies Domande & Risposte 1 12-03-2007 02:12 PM
confrontare le date ... i_priyank Shell scripting e di programmazione 3 09-21-2007 01:50 AM
confrontare le date ragha81 Shell scripting e di programmazione 2 11-01-2006 06:17 PM
confronto date ragha81 Shell scripting e di programmazione 17 10-25-2006 06:38 PM
Mentre siamo in tema di date. Un'altra questione data MizzGail UNIX for Dummies Domande & Risposte 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 09-01-2008
BufferExploder BufferExploder is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 9
Awk domanda: Somma date

Hi there,

Ho un file di log che ha il seguente schema:

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

Voglio somma il "12" l'ultimo 3 righe e salvare il "20" sulla prima riga. Il risultato finale dovrebbe essere

20080812 36 20

Io credo che mi dovrebbero più facile con awk? Molte grazie a consigli.
  #2 (permalink)  
Old 09-01-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - lo studente
  
 

Iscriviti Data: febbraio 2007
Ubicazione: Singapore / Bangalore / Cochin
Messaggi: 610
Non sono sicuro se ho il problema correttamente, ma qui è il codice: Ho appena si presume che l'utente sarà tenuto il primo e il terzo campo da prima linea.


Codice:
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 programmatore, autore
  
 

Iscriviti Data: marzo 2007
Luogo: Toronto, Canada
Interventi: 2.374


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

Ho il sospetto che ciò che si vuole veramente è più complesso di questo, in caso affermativo, vi sono probabilmente per descrivere il tuo file di input più completamente.
  #4 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 9
Siamo spiacenti, grazie per le vostre risposte, ma non ho messo l'intero file in modo qui è:

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


Quello che voglio fare è somma tutti i $ 2 per la stessa data e salvare i $ 3 per quella data. Ad esempio, come un inviato nel primo post.

200808150640 0 7667

200808150640 634799861 4703
200808150640 329658775 4704
200808150640 588901581 4875


Risultati attesi:

200808150640 (634799861 +329658775 +588901581) 7667

Io voglio fare tutto questo per il file. Molte grazie a consigli.
  #5 (permalink)  
Old 09-02-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Iscriviti Data: gennaio 2007
Ubicazione: Варна, България / Milano, Italia
Messaggi: 2.926
Basta indovinare:
(uso nawk / o usr/xpg4/bin/awk su Solaris)


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

Se avete bisogno di output ordinato, il tubo di sorta (o usare asorti se avete GNU Awk). Oppure basta usare Perl


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


Ultimo a cura di radoulov; al 09/02/2008 07:22 AM..
  #6 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 9
La ringrazio molto il mio amico lavora come un fascino.
  #7 (permalink)  
Old 09-02-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - lo studente
  
 

Iscriviti Data: febbraio 2007
Ubicazione: Singapore / Bangalore / Cochin
Messaggi: 610
Prova questo:


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

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 03:53 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0