2016-04-12 8 views
0

Ich habe einen Datenstrom, wie folgend:hinzufügen und verschmelzen Bash-Shell mit

A,1 
A,3 
B,4 
B,2 
C,1 
D,5 

... und so weiter. Ich möchte Linien auf 1 Spalte basierend fusionieren, nachdem sie die Werte in Spalte hinzufügen 2. Also es soll wie folgt aussehen:

A,4 
B,6 
C,1 
D,5 

Es sieht aus wie ein typischer MapReduce Job, aber ich möchte wissen, ob es einen Befehl/Bash-Tool, um diese Aufgabe wahrscheinlich in ein oder zwei Zeilen zu erledigen. Die Dateigröße, mit der ich arbeite, beträgt kaum 3-4 KB.

+0

http://unix.stackexchange.com/q/167280/67817 –

+0

@TomFenech, dann ist es eine ähnliche Art von Frage, aber nicht eine identische Lösung. Und diese Frage erweitert die Vielfalt dieser Art von Fragen. Danke, dass Sie mich auf diese Frage hingewiesen haben, aber ich denke, dass Sie Ihren Downvote noch einmal überdenken sollten. – gonephishing

+0

Ich weiß nicht, was Sie glauben lässt, dass ich über Ihre Frage abgestimmt habe - ich habe gerade eine Lösung für Ihr Problem gefunden. –

Antwort

2

Aho, Weinberger und Kernighan sind deine Freunde hier. Sie schrieben im Jahr 1977 AWK, um genau diese Klasse von Problemen zu behandeln.
Der folgende Code wird Ihr Ziel erreichen, wenn sich Ihr Datenstrom in einer Datei namens data befindet.
cat data | awk -F"," '{ a[$1] += $2 } END { for (i in a) { printf "%s,%d\n",i,a[i]; } }'

2

awk zur Rettung!

gibt es viele Variationen, aber das erwartet sortierte Eingang und hält die Reihenfolge des Schlüssels

awk -F, -v OFS=, '$1==p{a+=$2} $1!=p{if(p) print p,a; p=$1; a=$2} END{print p,a}' file 

A,4 
B,6 
C,1 
D,5 
0
cat file | sed -e "s/\(.*\),\(.*\)/\1=\`expr $\1 + \2\`/g" 
#A=`expr $A + 1` 
#A=`expr $A + 3` 
#B=`expr $B + 4` 
#B=`expr $B + 2` 
#C=`expr $C + 1` 
#D=`expr $D + 5` 


cat file | cut -d',' -f1 | uniq | sed 's/\(.\)/echo \1,$\1/g' 
#echo A,$A 
#echo B,$B 
#echo C,$C 
#echo D,$D 

(cat file | sed -e "s/\(.*\),\(.*\)/\1=\`expr $\1 + \2\`/g" ; cat file | cut -d',' -f1 | uniq | sed 's/\(.\)/echo \1,$\1/g') | sh -s 
#A,4 
#B,6 
#C,1 
#D,5 
Verwandte Themen