2010-04-20 4 views
2

J'ai un fichier texte dont le contenu est ci-dessous:scripts dans awk

1,A,100 
2,A,200 
3,B,150 
4,B,100 
5,B,250 

i besoin de la sortie comme:

A,300 
B,500 

la logique ici est la somme de tous les 3e champs dont le champ 2 est A et de la même manière pour B

comment pourrions-nous le faire en utilisant awk?

Répondre

2

Vous pouvez le faire en utilisant un hash comme:

awk -F"," '{cnt[$2]+=$3}END{for (x in cnt){printf "%s,%d\n",x,cnt[x]}}' file 
1

Eh bien, je ne suis pas pour l'écriture et le débogage du code pour vous. Toutefois, les éléments dont vous avez besoin sont les suivants:

  • Vous pouvez utiliser FS="," pour remplacer le séparateur de champs par une virgule.
  • Les champs qui vous intéressent sont évidemment les deuxième ($2) et troisième ($3) champs. Vous pouvez créer votre propre variables pour accumuler les valeurs dans.
0
$ awk -F"," '{_[$2]+=$3}END{for(i in _)print i,_[i]}' OFS="," file 
A,300 
B,500