awk 实现第一列相乘,第二列求和,并相加
1,289 views
0
AWK 取了三位创始人 Alfred Aho,Peter Weinberger, Brian Kernighan 的Family Name的首字符,学习AWK有一本相当经典的书《The AWK Programming Language》
我在这里的教程并不想面面俱到,本文和我之前的Go语言简介一样,全是示例,基本无废话。
现在想用awk实现第一列相乘,第二列求和,并相加
例如:
$ cat test_num.txt 1 10 2 20 3 30 4 40 5 50
说明:
1)第一列相乘,即 1 * 2 * 3 * 4 * 5 = 120
2)第二列相加,即 10 + 20 + 30 + 40 + 50 = 150
3)并相加,即 120 + 150 = 270
解题思路:
先对第一列求乘积,再对第二列求和,最后乘积与求和相加
解法1:使用 awk 运算
cat test_num.txt | awk 'BEGIN{multi=1;sum=0;}{multi*=$1;sum+=$2}END {print multi " + " sum " = " multi+sum}'
$ cat test_num.txt | awk 'BEGIN{multi=1;sum=0;}{multi*=$1;sum+=$2}END {print multi " + " sum " = " multi+sum}' 120 + 150 = 270
解法2:使用 shell while 循环
vim cal_multi_sum.sh
$ cat cal_multi_sum.sh #!/bin/bash # yanggang 2021.02.20 multi=1 sum=0 while read line do col1=`echo $line | cut -d ' ' -f 1` col2=`echo $line | cut -d ' ' -f 2` multi=`expr ${multi} \* ${col1}` sum=`expr ${sum} + ${col2}` echo "${col1} ${col2} ${multi} ${sum}" done < test_num.txt result=`expr ${multi} + ${sum}` echo "${multi} + ${sum} = ${result}"
运行结果:
$ sh cal_multi_sum.sh 1 10 1 10 2 20 2 30 3 30 6 60 4 40 24 100 5 50 120 150 120 + 150 = 270
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-03-05 05:17:03
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!