排序列表和添加数量Shellscript

时间:2010-01-20 00:48:35

标签: linux shell

我有一个列表,例如:

10,汽车轮胎
8,汽车轮胎
4,轮
18,撬棍
5,千斤顶
5,千斤顶
8,杰克

第一个数字是数量,第二个是项目名称。我需要获取此列表,以便它只显示每个项目一次,如果项目出现多次,它会将数量加在一起。这项工作正确的输出将是:

18,汽车轮胎 4,轮
18,撬棍
18,杰克斯

这需要以几千行的格式处理列表,最好用Linux shellcript编写,任何帮助表示感谢,谢谢!

4 个答案:

答案 0 :(得分:0)

看看:

man sort
man awk

您需要的实际命令是:

sort -n -t, +1 yourfile.txt | awk ......

你也可以在awk中完全做到这一点 Sum by group

答案 1 :(得分:0)

awk -F"," '{   t[$2] = t[$2] + $1    }
END{
    for(o in t){
        print o, t[o]
    }
}' file

输出

$ ./shell.sh
Crowbars 18
Wheels 4
Car Tyres 18
Jacks 18

答案 2 :(得分:0)

perl脚本怎么样?:

#!/usr/bin/perl -w
use strict;

my %parts;

while (<>) {
    chomp;
    my @fields = split /,/, $_;
    if (scalar @fields > 1) {
        if ($parts{$fields[1]}) {
            $parts{$fields[1]} += $fields[0];
        } else {
            $parts{$fields[1]} = $fields[0];
        }
    }
}

foreach my $k (keys %parts) {
    print $parts{$k}, ",$k\n";
}

答案 3 :(得分:0)

awk -v FS=, '{ if (! $2 in a) {
                 a[$2] = $1;
               } 
               else {
                 a[$2] += $1;
               } 
             } 
             END { 
               for (name in a) {
                 printf("%s\t%d\n", name, a[name]);
               } 
             }'