最好按ID添加数字

时间:2013-04-19 23:54:53

标签: bash

假设我有一个文件,它有2列。

12,1
12,2
11,3
11,2

我想在第一列添加第二列。 输出应该如下所示

12,3
11,5

在Linux环境中(在命令行上)有没有简单的方法?

2 个答案:

答案 0 :(得分:1)

在perl脚本中:

#!/usr/bin/env perl

use strict;
use warnings;

my %sum;
my %pos;

my $i = 0;

while(<>){
   chomp;
   my($x,$y) = split/,/;
   $pos{$x} = $i unless exists $pos{$x};
   $sum{$x} += $y;
   $i++;       
}

my @keys = sort { $pos{$a} <=> $pos{$b} } keys %pos;
for my $key(@keys){
   print "$key,$sum{$key}\n"
}

将其放入脚本中,并将您的号码放入文件中,然后运行:

perl $script $file

这也保留了秩序。 Python有类似的结构。

答案 1 :(得分:0)

$ cat file
12,1
12,2
11,3
11,2

以下是awk方法:

$ awk -F, '$1 { a[$1]+=$2 } END { for (i in a) { printf "%s,%d\n", i, a[i] } }' file
11,5
12,3

这里有一个bash

$ cat ./id.sh
#!/bin/bash

IFS=','
while read id value; do
        [ -n "${id}" ] || continue
        (( a[id] += value ))
done < file

for id in "${!a[@]}"; do
        echo "${id},${a[${id}]}"
done

$ ./id.sh
11,5
12,3

它们都按照相同的原则工作 - 它们逐行读取它们的字段/输入分隔符设置为,并组装由第一列索引的数组 - 第二列的值刚刚总结。完成所有艰苦工作后,我们将打印出阵列。