【问题标题】:Sorting List and Adding Together Amounts Shellscript排序列表和添加金额 Shellscript
【发布时间】:2010-01-20 00:48:34
【问题描述】:

我有一个列表,例如:

10,汽车轮胎
8、汽车轮胎
4、车轮
18、撬棍
5、千斤顶
5、千斤顶
8、千斤顶​​

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

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

这需要处理这种几千行格式的列表,最好用 Linux shellscript 编码,感谢任何帮助,谢谢!

【问题讨论】:

    标签: linux shell


    【解决方案1】:
    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】:

      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】:
        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]);
                       } 
                     }'
        

        【讨论】:

          【解决方案4】:

          看看:

          man sort
          man awk
          

          你需要的实际命令是:

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

          您也可以完全在 awk 中执行此操作 Sum by group

          【讨论】:

          • 我怀疑它是否真的有效......我没有看到它计算总和。并且语法 +0 已过时。
          猜你喜欢
          • 1970-01-01
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2018-08-30
          • 1970-01-01
          • 2021-01-29
          • 2022-06-13
          相关资源
          最近更新 更多