首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用添加和合并

使用添加和合并
EN

Stack Overflow用户
提问于 2016-04-12 12:51:35
回答 3查看 57关注 0票数 0

我有如下数据流:

代码语言:javascript
复制
A,1
A,3
B,4
B,2
C,1
D,5

..。诸若此类。在添加第2列中的值后,我希望根据第1列合并行。

代码语言:javascript
复制
A,4
B,6
C,1
D,5

它看起来像一个典型的MapReduce作业,但是我想知道是否有任何命令/ bash工具来完成这个任务,可能是在一两行。我正在处理的文件大小几乎不是3-4 KB。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-12 14:19:48

阿霍温伯格克尼汉是你在这里的朋友。他们在1977年写信给AWK,正是为了解决这类问题。

如果您的数据流位于名为data的文件中,下面的代码将实现您的目标。

cat data | awk -F"," '{ a[$1] += $2 } END { for (i in a) { printf "%s,%d\n",i,a[i]; } }'

票数 2
EN

Stack Overflow用户

发布于 2016-04-12 14:18:39

awk去营救!

有许多变化,但这需要排序输入,并保持键的顺序。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-04-12 22:28:49

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36573861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档