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

 

 

参考推荐:

awk 简明教程

awk 实例(1)—— 变量

awk 实例(2)—— 功能

awk 实例(3)—— 函数

linux awk 运算符

Linux awk 数组和循环

Linux awk 内置函数实例

Linux grep awk 命令的正则匹配提取字符串

5个超实用的 Shell 脚本

sed 命令的详细用法

Linux cut 命令

Linux grep 多个关键字

Shell curl 和 wget 使用代理IP

Shell 脚本的常用功能代码

Linux shell 字符串操作详解

Linux shell 脚本常识和技巧

Linux shell 局部变量与全局变量

Linux 系统的内存和平均负载监控脚本

Linux 抓取网页实例(shell+awk)

网络在线测速、软件测速、命令行测速的工具汇总