分組我有2列如何總結由值在其他
100 5
100 10
100 10
101 2
101 4
102 10
102 2
我想在列1匹配值總結第2列的值由數據的大文件中的列值這個例子,我期待的輸出是
100 25
101 6
102 12
我想使用bash腳本來處理這個問題。有人可以解釋我如何做到這一點
分組我有2列如何總結由值在其他
100 5
100 10
100 10
101 2
101 4
102 10
102 2
我想在列1匹配值總結第2列的值由數據的大文件中的列值這個例子,我期待的輸出是
100 25
101 6
102 12
我想使用bash腳本來處理這個問題。有人可以解釋我如何做到這一點
使用awk
:
awk '{a[$1]+=$2}END{for(i in a){print i, a[i]}}' inputfile
您的輸入,它會產生:
100 25
101 6
102 12
你可以使用關聯數組。第一列是索引,第二列是你添加的內容。
#!/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]}] + = $ {線[1]}))'更加簡潔和可能更快的而循環 –
在一個Perl oneliner
perl -lane "$s{$F[0]} += $F[1]; END { print qq{$_ $s{$_}} for keys %s}" file.txt
Python是我的選擇:
d = {}
for line in f.readlines():
key,value = line.split()
if d[key] == None:
d[key] = 0
d[key] += value
print d
爲什麼你會想要一個bash腳本?
使用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
輝煌!非常快 – user3004356