热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux将文件的第二列求和,awk实现第一列相乘,第二列求和,并相加米扑博客...

AWK取了三位创始人AlfredAho,PeterWeinberger,BrianKernighan的FamilyName的首字符,学习AWK有一本相当

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

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

参考推荐:



推荐阅读
author-avatar
Aovte
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有