我有一个包含2列数据的大文件
100 5
100 10
100 10
101 2
101 4
102 10
102 2
我想将第2列中的值与第1列中的匹配值相加。对于此示例,我期望的输出是
100 25
101 6
102 12
我正在努力使用bash脚本来解决这个问题。有人可以解释我怎么能这样做
答案 0 :(得分:4)
使用awk
:
awk '{a[$1]+=$2}END{for(i in a){print i, a[i]}}' inputfile
为了您的输入,它会产生:
100 25
101 6
102 12
答案 1 :(得分: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
答案 2 :(得分:2)
穿着perl one liner
perl -lane "$s{$F[0]} += $F[1]; END { print qq{$_ $s{$_}} for keys %s}" file.txt
答案 3 :(得分: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脚本?
答案 4 :(得分: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