文件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
头文件的问题
从多个进程追加到单个文件的“线程安全性”?
有没有人在即将到来的delphi版本中有关于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 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] 举报,一经查实,本站将立刻删除。