![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| Les fichiers et les dates | mastachef | UNIX pour les nuls Questions et réponses | 1 | 12-03-2007 02:12 PM |
| comparer des dates ... | i_priyank | De programmation et de script Shell | 3 | 09-21-2007 01:50 AM |
| comparer dates | ragha81 | De programmation et de script Shell | 2 | 11-01-2006 06:17 PM |
| comparer dates | ragha81 | De programmation et de script Shell | 17 | 10-25-2006 06:38 PM |
| Alors que nous sommes sur le sujet des dates. Une autre question date | MizzGail | UNIX pour les nuls Questions et réponses | 14 | 10-24-2003 08:54 AM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
Awk question: Somme dates
Salut,
J'ai un fichier journal qui a le schéma suivant: 20080812 0 20 20080812 12 10 20080812 12 10 20080812 12 10 Je tiens à la somme des "12" sur les 3 dernières lignes et sauver le "20" sur la première ligne. Le résultat final devrait être 20080812 36 20 Je crois que cela devrait me plus facile avec awk? Merci beaucoup, dans les conseils. |
|
||||
|
Ne suis pas sûr que je reçois bien la question, mais voici le code: Je suppose que vous prenez le premier et le troisième champs de première ligne. Code:
awk 'BEGIN {sum=0; } {if (NR==1){ var1=$1; var3=$3;} sum += $2; } END { print var1" "sum" "var3 }' filename
|
|
||||
|
Désolé merci pour vos réponses, mais je n'ai pas mis l'intégralité du dossier, il est ici:
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 Ce que je veux faire est la somme de tous les 2 $ pour la même date et sauver le 3 $ pour cette date. Par exemple, comme un affichés dans le premier message. 200808150640 0 7667 200808150640 634799861 4703 200808150640 329658775 4704 200808150640 588901581 4875 Résultat escompté: 200808150640 (634799861 +329658775 +588901581) 7667 Je veux le faire pour tout le fichier. Merci beaucoup, dans les conseils. |
|
|||||
|
Il suffit de deviner: (utilisation nawk / ou usr/xpg4/bin/awk sur Solaris) Code:
awk 'END \
{ for (dt in third) print dt, second[dt], third[dt] }
{ if (!_[$1]++) third[$1] = $3; second[$1] += $2 }
' filename
Si vous avez besoin de la sortie triés, pipe à trier (ou si vous avez asorti GNU Awk). Ou simplement l'utiliser 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
Dernière édition par radoulov; au 09.02.2008 07:22 AM.. |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|