-1
votes

Somme des 2e et 3ème colonne pour la même valeur dans la 1ère colonne

Je veux résumer la valeur dans la colonne 2e et 3e colonne pour la même valeur dans la première colonne

awk -F" " '{b[$2]+=$1} END { for (i in b) { print b[i],i } } '


1 commentaires

Vous envisagez de vous question Histoire, je pense que vous devriez lire ceci: Stackoverflow.com/help/someone-answers


5 Réponses :


0
votes

Vous pouvez le faire avec awk code> en enregistrant d'abord les champs dans le premier enregistrement, puis pour tous les enregistrements suivants, en comparant si le premier champ correspond si, le cas échéant, ajoutez le contenu des champs deux et trois et continuer. Si le premier champ ne parvient pas à correspondre, émettez ensuite votre premier champ et que les sommes d'exécution, par exemple xxx pré>

avec votre entrée dans fichier code>, vous pouvez copier et coller le ce qui précède dans votre terminal et obtenir, les suivants: P>

EXEMPLE UTILISATION / SORTIE STROND> P>

1555971300 2 0
1555971000 0 2
1555971000 6 1
1555971300 3 0


3 commentaires

En fait, le début devrait simplement être supprimé :) j'ai commencé dans une direction et terminé dans un autre.


@DAVIDCRANKIN Votre première solution ne fonctionne pas si vous n'avez pas toutes la colonne 1 1 $ de manière séquentielle. Par exemple, déplacez la ligne d'entrée 1 à la ligne 4 (à la fin du fichier)


Oui, cela est expliqué dans la présentation de la 2e approche. Le premier a été fait sans tableaux, le second les introduit. Bon oeil.



1
votes

Voici une autre solution avec la lecture input_file 2 fois et il fournira une sortie dans la même séquence que la séquence d'entrée_file.

awk 'FNR==NR{a[$1]+=$2;b[$1]+=$3;next} ($1 in a){print $1,a[$1],b[$1];delete a[$1]}' Input_file Input_file


0 commentaires

0
votes

Un autre awk code> qui fonctionnerait quel que soit tout ordre des enregistrements, qu'ils ne soient pas triés ou non:

awk '{r[$1]++}
     r[$1]==1{o[++c]=$1}
     {f[$1]+=$2;s[$1]+=$3}
     END{for(i=1;i<=c;i++){print o[i],f[o[i]],s[o[i]]}}' file


0 commentaires

1
votes

Si des données dans "D" sans trier, essayé sur GNU AWK,

awk '{w[NR]=$0} END{asort(w);f=1;for(;i++<NR;){split(w[i],v);if(v[1]==a||f){f=0;b+=v[2];c+=v[3]} else{print a,b,c;b=v[2];c=v[3];} a=v[1]} print a,b,c;}' d


0 commentaires

0
votes

en supposant que lorsque vous avez écrit:

$ awk '{ b[$1]+=$2; c[$1]+=$3 } END{ for (i in b) print i,b[i],c[i] }' file
1555971000 6 3
1555971300 5 0


0 commentaires