我试图仅使用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
编辑:我想得到输出中重复的数字之和。我们假设输出中的重复数字是4826
和0028
,并且它们都重复了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
答案 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