![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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. |
|
||||
|
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
|
|
||||
|
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. |
|
|||||
|
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.. |
|
||||
|
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
|
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|