微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并和汇总来自多个文件的数据

我有两个文件,看起来像这样:

文件1

aaa 5 bbb 2 ccc 9 ddd 46 eee 89 fff 56

文件2

aaa 54 bbb 8 ccc 16 ddd 4 eee 66 fff 9

我想有具体的列的总和(例如,两个文件中的aaa的总和和ccc + ddd的总和和bbb的总和+ eee的总和+ fff的总和)

Python线程与Linux中的多处理

Python多处理 – 捕获信号以重新启动subprocess或closures父进程

ALSA:我怎样才能通过耳机和扬声器发送audio

如果没有用户,udp组播是否把任何东西放在线路上?

Android的Lubuntu – libGL错误:未能加载驱动程序:i965

有没有一个简单的方法来做到这一点与awk例如?

文件的问题

从多个进程追加到单个文件的“线程安全性”?

有没有人在即将到来的delphi版本中有关于Linux支持的信息?

linux汇编:如何调用系统调用

如何强制(或解决方法)logrotate将旧日志移动到不同物理磁盘上的olddir?

如果你只是想要总和,这可以在纯粹的bash中完成(在这里使用关联数组,因此需要bash 4):

declare -A sums while read name val1 val2; do sums[$name]=$(( val1 + val2 )) done < <(join -j 1 file1 file2) echo "Sum of aaa: ${sums[aaa]}" echo "Sums of ccc and ddd: $(( ${sums[ccc]} + ${sums[ddd]} ))" echo "Sums of bbb,eee,and fff: $(( ${sums[bbb]} + ${sums[eee]} + ${sums[fff]} ))"

与aaa的和的例子:

kent$ awk 'NR==FNR{a[$1]=$2;next;}{a[$1]+=$2}END{print "sum of aaa:",a["aaa"]}' file1 file2 sum of aaa: 59

你可以改变END{xxx}部分以得到不同种类的“sum”:)例如a["bbb"]+a["eee"]会给你bbb + eee的总和

连接成一个文件并使用:

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

您可以将输出从cat输出到awk:

cat file1 file2 | awk '...

如果要对输出进行排序,请对其进行排序。

我正在做同样的事情,但由于我有巨大的文件,我不认为使用awk数组连接和求和是一个好主意。

我实际上使用这个:

join -t$'t' --check-order -a 1 -a 2 -e 0 -1 1 -2 1 file1 file2 > joined.tmp awk 'BEGIN{FS="t"; OFS="t"}{print $1,$2+$3}' joined.tmp > merged.txt

我正在寻找一个更快的方法,但我认为,对于大文件,这个解决方案比以前的答案提出的更好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐