nous avons des données comme:
12 0
13 0
20 0
25 1
64 4
77 1
89 100
1201 204
J'aimerais avoir cette sortie:
3 0
5 1
6 4
7 100
8 204
explication: nous avons 3 AS (systèmes autonomes) qui ont le degré de 0, puis nous avons 5 LAS qui sont degré 1 ou moins que 1 et nous avons 6 LAS que Le degré est 4 ou moins que 4 et ...
Il y a beaucoup de lignes (100 000) il s’agit de distributions CDF, je suppose, cela fait partie de l’analyse des données bgpdump et je veux calculer ces nombres.et encore une fois pour votre aide
Réponses:
Voici un script Perl rapide qui devrait faire le travail pour vous:
Ce script nécessitera une mémoire considérable pour les grands ensembles de données en entrée; il insère tout le fichier d'entrée avant de l'utiliser, car il ne semble pas que le fichier d'entrée soit trié, et il est nécessaire de trier les données par degré avant de les utiliser. Cela dit, il devrait assez bien faire le travail pour vous - faites le moi savoir si ce n'est pas le cas!
la source
Voici un script rapide à 100% bash qui fera le travail:
Si vous voulez un script que vous pouvez appeler depuis une ligne de commande:
Ou si vous préférez une ligne pour impressionner votre grand-mère:
Il s'exécute en environ 2-3 secondes sur un processeur Pentium dual core à 2,6 GHz sur un fichier de 100 000 lignes.
Modifier
Explications:
La première boucle:
a
pour être un tableau vide:a=()
datafile.txt
ligne par ligne. Il y a deux champs par ligne, seul le second est mis dans les noms de variablesn
n
est non-vide (c'est le test que[[ -n $n ]]
nous incrémentons la valeur de lan
-th clé du tableaua
; c'est ce que fait la ligne((++a[n]))
.((...))
C'est le contexte arithmétique de bash.a
et lek
troisième champ est exactement le nombre de systèmes autonomes ayant un degré égal àk
.Puis la deuxième boucle:
c
est définie sur 0.for i in ${!a[@]}; do
passera en boucle à travers toutes les clés du tableaua
.$((c+=a[i]))
ajoutera la valeur dea[i]
àc
et augmentera à cette valeur. Cette valeur estecho
édité avec la valeur de la clé qui lui esti
ajoutée.J'espère que cela t'aides!
la source