得到unix

时间:2018-02-15 03:51:37

标签: bash awk

我试图仅使用awk获取bash shell中输出的总和。我遇到的一个问题是我只需要使用awk。

这是我用来获取输出的代码: awk '{print substr($7, 9, 4)}' emp.txt

这是我得到的输出:(output omitted) 7606 6498 7947 4044 1657 3872 4834 8463 9280 2789 9104

这就是我尝试做数字总和的方法:awk '(s = s + substr($7, 9, 4)) {print s}' emp.txt

问题在于它没有给我正确的输出(应该是9942686),而是给我系列总和(如下所示)。 (output omitted) 9890696 9898643 9902687 9904344 9908216 9913050 9921513 9930793 9933582 9942686

我是否以错误的方式使用代码?或者有没有其他方法使用awk这样做,我做错了吗?

以下是我正在处理的示例文件:

Brynlee Watkins F 55 Married 2016 778-555-6498 62861 Malcolm Curry M 24 Married 2016 604-555-7947 54647 Aylin Blake F 45 Married 2015 236-555-4044 80817 Mckinley Hodges F 50 Married 2015 604-555-1657 46316 Rylan Dorsey F 51 Married 2017 778-555-3872 77160 Taylor Clarke M 23 Married 2015 604-555-4834 46624 Vivaan Hooper M 26 Married 2016 778-555-8463 80010 Gibson Rowland M 42 Married 2017 236-555-9280 59874 Alyson Mahoney F 51 Single 2017 778-555-2789 71394 Catalina Frazier F 53 Married 2016 604-555-9104 79364

编辑:我想得到输出中重复的数字之和。我们假设输出中的重复数字是48260028,并且它们都重复了2次。我只想要这些数字的总和(每次重复都必须算作个体。因此这些数字计为4)。因此,这4个数字的期望输出应为9708

Will Duffy M 33 Single 2017 236-555-4826 47394 Nolan Reed M 27 Single 2015 604-555-0028 46622 Anya Horn F 54 Married 2017 236-555-4826 73270 Cynthia Davenport F 29 Married 2015 778-555-0028 59687 Oscar Medina M 43 Married 2016 778-555-7864 73688 Angelina Herrera F 37 Married 2017 604-555-7910 82061 Peyton Reyes F 35 Married 2017 236-555-8046 51920

2 个答案:

答案 0 :(得分:1)

END { print s }

由于您只需要打印一次总和,所以请在END模式下进行。

awk '{s = s + substr($7, 9, 4)} END {print s}' emp.txt

答案 1 :(得分:0)

您可以尝试关注awk并告诉我这是否对您有所帮助。它看起来总是在-后找到最后一位数字:

awk -F' |-' '{sum+=$(NF-1)} END{print sum}'  Input_file

<强> 编辑:

awk -F' |-' '
{
  ++a[$(NF-1)];
  b[$(NF-1)]=b[$(NF-1)]?b[$(NF-1)]+$(NF-1):$(NF-1)
}
END{
  for(i in a){
    if(a[i]>1){
     print i,b[i]}
}}
'   Input_file

输出如下:

4826 9652
0028 56