The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



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

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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 09-01-2008
BufferExploder BufferExploder is offline
Registered User
  
 

Join Date: Sep 2008
Messages: 9
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.
  #2 (permalink)  
Old 09-01-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - l'étudiant
  
 

Join Date: Feb 2007
Lieu: Singapour / Bangalore / Cochin
Posts: 610
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

  #3 (permalink)  
Old 09-02-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmeur, auteur
  
 

Join Date: Mar 2007
Lieu: Toronto, Canada
Posts: 2362


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

Je pense que ce que vous voulez vraiment est plus complexe que cela, Si oui, vous aurez probablement à décrire votre fichier d'entrée plus complètement.
  #4 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Registered User
  
 

Join Date: Sep 2008
Messages: 9
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.
  #5 (permalink)  
Old 09-02-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Join Date: Jan 2007
Lieu: Варна, България / Milano, Italia
Posts: 2,915
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..
  #6 (permalink)  
Old 09-02-2008
BufferExploder BufferExploder is offline
Registered User
  
 

Join Date: Sep 2008
Messages: 9
Merci beaucoup mon ami fonctionne comme un charme.
  #7 (permalink)  
Old 09-02-2008
dennis.jacob dennis.jacob is offline Forum Advisor  
dj - l'étudiant
  
 

Join Date: Feb 2007
Lieu: Singapour / Bangalore / Cochin
Posts: 610
Essayez ceci:


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

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 03:28 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0