2010-10-30 14 views
1

que je fais l'analyse de la visualisation sur un fichier de trace que je produis de ns-2 que des traces sur les paquets envoyés/reçus/a chuté à différents moments de la simulationcolonne filtrage sur fichier de trace

est ici une sortie de trace de l'échantillon - Je veux filtrer la colonne1 après l'avoir groupée en S/D/R séparément, de sorte que je puisse la sommer séparément pour trouver la fraction de livraison de paquets.

Je ne sais pas comment y parvenir? (? Peut-être un peu awk/help python)

MISE À JOUR: D'accord, je l'ai fait -

cut -d' ' -f1 wireless-out.tr | grep <x> | wc -l 

<x> est soit s ou r ou D

Répondre

0
import collections 
result=collections.defaultdict(list) 
with open('data','r') as f: 
    for line in f: 
     line=line.split() 
     key=line[0] 
     value=float(line[1]) 
     result[key].append(value) 
for key,values in result.iteritems(): 
    print(key,sum(values)) 

rendements:

('s', 160.15817391900003) 
('r', 80.058963809000005) 
('D', 80.195127232999994) 

Est-ce que c'est proche du formulaire que vous voulez?

+0

heh! votre solution m'a aidé à construire mon programme! une fois que j'ai pu lire et diviser les colonnes, j'ai commencé à utiliser des tuples/listes/dicts pour calculer exactement ce que je cherchais, maintenant je regarde mon graphique brillant dessiné par MATLAB, merci :) –

+0

@Vaibhav Bajpai: Yay! Content que vous ayez trouvé ça utile. – unutbu

0
import csv 
import itertools 

data = csv.reader(open('aPm3EFax.txt', 'rb'), delimiter=' ') 

result = [(i, sum(float(k[1]) for k in g)) 
for i, g in itertools.groupby(sorted(list(data)), key=lambda x: x[0])] 
1

pour cette solution:

awk '{data[$1]+=$2} END{for (d in data) print d,data[d]}' inputfile 

Sortie:

D 80.1951 
r 80.059 
s 160.158 
+0

C'est marrant de comparer ce one-liner Awk aux solutions Python. –