File A
Sector A 100
Sector B 200
Sector C 300
Sector D 500
File B
Sector A 100
Sector B 200
Sector C 300
Sector D 500
File C
Sector A 100
Sector B 200
Sector C 300
Sector D 500
我想得到一个文件,该文件的所有文件的扇区A,B,C的总和。
最终结果
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
Shell脚本会很棒!!!您的建议受到赞赏。
答案 0 :(得分:2)
请您尝试以下。
awk '{a[$1 FS $2]+=$NF} END{for(i in a){print i,a[i]}}' fileA fileB fileC
输出如下。
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
答案 1 :(得分:1)
假设您的列由制表符分隔,则可以使用GNU datamash:
sort fileA fileB fileC | datamash groupby 1 sum 2
输出
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
如果您的(可能是很大的)单个输入文件已经排序,则可以使用sort -m ...
而不是sort
来加快处理过程。
答案 2 :(得分:0)
不是最聪明的解决方案,但非常简单易懂:
person['surname'] = 'Baz';
答案 3 :(得分:0)
1 。sort
协助awk
$ sort filea.txt fileb.txt filec.txt | awk ' { c=$2; if(c!=p && NR>1 ) { print $1,p,s;s=0} p=c;s+=$3 } END { print $1,p,s } '
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
$
2。。paste
协助awk
$ paste filea.txt fileb.txt filec.txt | awk ' { for(i=3;i<=NF;i+=3) s+=$i; print $1,$2,s ; s=0 } '
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
$
答案 4 :(得分:0)
使用Perl,
$ perl -0777 -ne ' s/^(.+) (\d+)$/$kv{$1}+=$2/gme; END { for(sort keys %kv) { print "$_ $kv{$_}\n" }} ' filea.txt fileb.txt filec.txt
Sector A 300
Sector B 600
Sector C 900
Sector D 1500
$