shell读取文件中的数据并求和,以及除法--awk

选项:

$n	当前记录的第n个字段,字段间由FS分隔
$0	完整的输入记录
ARGC	命令行参数的数目
ARGIND	命令行中当前文件的位置(从0开始算)
ARGV	包含命令行参数的数组
CONVFMT	数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO	最后一个系统错误的描述
FIELDWIDTHS	字段宽度列表(用空格键分隔)
FILENAME	当前文件名
FNR	各文件分别计数的行号
FS	字段分隔符(默认是任何空格)
IGNORECASE	如果为真,则进行忽略大小写的匹配
NF	一条记录的字段的数目
NR	已经读出的记录数,就是行号,从1开始
OFMT	数字的输出格式(默认值是%.6g)
OFS	输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS	输出记录分隔符(默认值是一个换行符)
RLENGTH	由match函数所匹配的字符串的长度
RS	记录分隔符(默认是一个换行符)
RSTART	由match函数所匹配的字符串的第一个位置
SUBSEP	数组下标分隔符(默认值是/034)

1、求和:

所读文件如下:

$ less 246.log
************************* sand *************************
--------- 10.246.26.183---------
4       /opt/gnode/userdata/gbase/sandbox246
--------- 10.246.27.4---------
4       /opt/gnode/userdata/gbase/sandbox246
--------- 10.246.27.6---------
4       /opt/gnode/userdata/gbase/sandbox246
--------- 10.246.27.7---------
4       /opt/gnode/userdata/gbase/sandbox246

需要将4加到一起

$ cat 246.log | awk -FS '{sum+=$1} END {print sum}'

FS表示按照空格进行划分
结果如下:
在这里插入图片描述

2、做除法

在脚本中进行调用变量除法:

$ sand_sum=`echo "$sand $A" | awk '{printf("%.2f\n",$1/$2)}'`

# 由于调用变量,需要提前echo输出再进行匹配否则会出错
# %.Nf 表示保留到小数点后几位
# printf支持浮点数

你可能感兴趣的:(shell)