2014-03-24 35 views
-2

分組我有2列如何總結由值在其他

100 5 
100 10 
100 10 
101 2 
101 4 
102 10 
102 2 

我想在列1匹配值總結第2列的值由數據的大文件中的列值這個例子,我期待的輸出是

100 25 
101 6 
102 12 

我想使用bash腳本來處理這個問題。有人可以解釋我如何做到這一點

回答

4

使用awk

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

您的輸入,它會產生:

100 25 
101 6 
102 12 
+0

輝煌!非常快 – user3004356

2

你可以使用關聯數組。第一列是索引,第二列是你添加的內容。

#!/bin/bash 

declare -A columns=() 

while read -r -a line ; do 
    columns[${line[0]}]=$((${columns[${line[0]}]} + ${line[1]})) 
done < "${1}" 

for idx in ${!columns[@]} ; do 
    echo "${idx} ${columns[${idx}]}" 
done 
+0

'((列[$ {線[0]}] + = $ {線[1]}))'更加簡潔和可能更快的而循環 –

2

在一個Perl oneliner

perl -lane "$s{$F[0]} += $F[1]; END { print qq{$_ $s{$_}} for keys %s}" file.txt 
0

Python是我的選擇:

d = {} 
for line in f.readlines(): 
    key,value = line.split() 
    if d[key] == None: 
     d[key] = 0 
    d[key] += value 

print d 

爲什麼你會想要一個bash腳本?

0

使用AWK和維持的順序:

awk '!($1 in a){a[$1]=$2; b[++i]=$1;next} {a[$1]+=$2} END{for (k=1; k<=i; k++) print b[k], a[b[k]]}' file 
100 25 
101 6 
102 12